Ik ben het met Jamie eens dat je misschien wilt dat de subtotalen visueel in een andere laag worden verwerkt, maar wat je zou kunnen proberen is het gebruik van de GROUPING()
functie op de kolom. Deze functie retourneert 1 als deze deel uitmaakt van de GROUPING SETS
subtotalen, en 0 als het een normale kolom is. http://technet.microsoft.com/en- us/library/ms178544(SQL.90).aspx
Ik heb de voorbeeldgegevens toegevoegd waarmee ik heb getest. Verwijder de eerste WITH emp_test AS ()
wanneer u de select-instructie gebruikt.
Mijn testgegevens:
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
)
Antwoord om subtotalen in een aparte kolom te krijgen:
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)