Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Ensembles de regroupement :afficher les sous-totaux dans une autre colonne spécifique ?

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)