Je suis d'accord avec Jamie, vous voudrez peut-être que les sous-totaux soient traités visuellement dans une couche différente, mais ce que vous voudrez peut-être essayer, c'est d'utiliser le GROUPING()
fonction sur la colonne. Cette fonction renvoie 1 si elle fait partie des GROUPING SETS
sous-totaux et 0 s'il s'agit d'une colonne normale. http://technet.microsoft.com/en- us/library/ms178544(SQL.90).aspx
J'ai inclus les exemples de données avec lesquels j'ai testé. Supprimer le premier WITH emp_test AS ()
lorsque vous utilisez l'instruction select.
Mes données de test :
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
)
Réponse pour obtenir les sous-totaux sur une colonne distincte :
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)