sql >> Base de Datos >  >> RDS >> Sqlserver

Conjuntos de agrupación:¿mostrar subtotales en otra columna específica?

Estoy de acuerdo con Jamie, es posible que desee que los subtotales se manejen visualmente en una capa diferente, pero lo que podría intentar es usar GROUPING() función en la columna. Esta función devuelve 1 si es parte de GROUPING SETS subtotales y 0 si es una columna regular. http://technet.microsoft.com/en- us/library/ms178544(SQL.90).aspx

Incluí los datos de muestra con los que probé. Eliminar el primer WITH emp_test AS () cuando usa la instrucción select.

Mis datos de prueba:

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
)

Responda para obtener subtotales en una columna separada:

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)