Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Gruppierungssätze:Zwischensummen in einer anderen bestimmten Spalte anzeigen?

Ich stimme Jamie zu, Sie möchten vielleicht, dass die Zwischensummen visuell in einer anderen Ebene behandelt werden, aber was Sie vielleicht ausprobieren möchten, ist die Verwendung von GROUPING() Funktion auf der Säule. Diese Funktion gibt 1 zurück, wenn sie Teil der GROUPING SETS ist Zwischensummen und 0, wenn es sich um eine reguläre Spalte handelt. http://technet.microsoft.com/en- us/library/ms178544(SQL.90).aspx

Ich habe die Beispieldaten eingefügt, mit denen ich getestet habe. Entfernen Sie das erste WITH emp_test AS () wenn Sie die select-Anweisung verwenden.

Meine Testdaten:

WITH emp_test AS
(
   SELECT 10 AS DEPTNO, 7782 AS EMPNO, 20000 AS sal
   UNION ALL SELECT 10, 7839, 10000
   UNION ALL SELECT 20, 7566, 5950
   UNION ALL SELECT 20, 7788, 6000
)

Antworten, um Zwischensummen in einer separaten Spalte zu erhalten:

SELECT deptno, empno
   , CASE
      WHEN GROUPING(empNo) = 1 THEN null
      ELSE SUM(sal)
     END as sum_salary
   , CASE
      WHEN GROUPING(empno) = 1 THEN SUM(sal)
      ELSE NULL
     END AS SubTotal
FROM emp_test
GROUP BY GROUPING SETS (DeptNo, Empno), (DeptNo)