Jeg er enig med Jamie, at du måske vil have subtotalerne visuelt håndteret i et andet lag, men hvad du måske vil prøve er at bruge GROUPING()
funktion på kolonnen. Denne funktion returnerer 1, hvis den er en del af GROUPING SETS
subtotaler og 0, hvis det er en regulær kolonne. http://technet.microsoft.com/en- us/library/ms178544(SQL.90).aspx
Jeg inkluderede de prøvedata, jeg testede med. Fjern den første WITH emp_test AS ()
når du bruger select-sætningen.
Mine testdata:
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
)
Svar for at få subtotaler i separat kolonne:
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)