MIT ROLLUP GRAND TOTAL UND SUBTOTAL

Ich habe ein Skript, das eine Ergebnismenge erzeugt, die fast da ist! Ich versuche, Zwischensummen und Summen zu bekommen. Ich bekomme Summen auf der Jahresspalte und eine Gesamtsumme am Ende. Mein Ziel ist es, das endgültige Ergebnis zu erhalten, um "großartig" anstelle von Zwischensumme zu geben. Bitte beachten Sie, dass meine letzte Zeile, 'location' auch aufgrund der Rollup-function als Null zurückkehrt.

SELECT YEAR, COUNT(ACCOUNTS) AS 'ACCOUNTS', SUM(BALANCE) as 'BAL', LOCATION AS 'LOCATION' FROM ACCOUNT A WHERE C.CREATE BETWEEN DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()-1),0) AND DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0) GROUP BY LOCATION, YEAR WITH ROLLUP 

Ergebnismenge …

  • Hat NULL einen datatyp?
  • SQL Inner Join On Null-Werte
  • SQL server - Warum erlaubt es mir, Leerzeichen in eine nicht nullable Spalte einzufügen?
  • Warum werden NULL-Werte als 0 in Fact-Tabellen abgebildet?
  • Welches ist besser: NICHT EXIST vs ISNULL (, '') = 0
  • T-SQL, Nullsumme für keine Übereinstimmung
  •  YEAR ACCOUNTS BAL LOCATION ---- -------- --------- -------- NULL 11 80687.51 WA NULL 107 592980.18 NULL 

    Gewünschte Ergebnismenge …

     YEAR ACCOUNTS BAL LOCATION ---- -------- --------- -------- sub total 11 80687.51 WA grand total 107 592980.18 ALL 

  • IST NULL gegen <> 1 SQL-Bit
  • Wie loswerden NULL-Werte in SQL server 2008-Tabelle
  • SQL SELECT Bestellen von Spalten mit Nullwerten
  • Wenn Wert den Wert zurückgibt. Wenn ein datasatz nicht vorhanden ist oder wenn Spalte null ist, geben Sie 0 in Sql server zurück - verschiedene Möglichkeiten
  • Warum verhält sich TSQL operator + anders als aggregation function sum ()
  • T-SQL, Nullsumme für keine Übereinstimmung
  • 2 Solutions collect form web for “MIT ROLLUP GRAND TOTAL UND SUBTOTAL”

    Sie können GROUPING_ID verwenden , um den Gruppierungssatz zu identifizieren, den jede Zeile aggregiert

     SELECT CASE GROUPING_ID(LOCATION, YEAR) WHEN 0 THEN YEAR WHEN 2 THEN N'Sub total: ' + STR(YEAR) WHEN 3 THEN N'Grand total' END COUNT(ACCOUNTS) AS 'ACCOUNTS', SUM(BALANCE) as 'BAL', LOCATION AS 'LOCATION' FROM ACCOUNT A WHERE C.CREATE BETWEEN DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()-1),0) AND DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0) GROUP BY LOCATION, YEAR WITH ROLLUP 

    Du musst CASE WHEN (GROUPING (ColumnName) = 1) verwenden, wie folgt:

     SELECT CASE WHEN GROUPING(YEAR) = 1 AND GROUPING(LOCATION) = 1 THEN 'grand total' WHEN GROUPING(YEAR) = 1 AND GROUPING(LOCATION) <> 1 THEN 'sub total' ELSE YEAR END AS YEAR COUNT(ACCOUNTS) AS 'ACCOUNTS', SUM(BALANCE) as 'BAL', CASE WHEN GROUPING(LOCATION) = 1 THEN 'ALL' ELSE LOCATION AS 'LOCATION' FROM ACCOUNT A WHERE C.CREATE BETWEEN DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()-1),0) AND DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0) GROUP BY LOCATION, YEAR WITH ROLLUP 
    SQL DE: Microsoft SQL Server, MySQL, Oracle and other Structured Query Languages .