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)