Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Agrupar conjuntos:exibir subtotais em outra coluna específica?


Concordo com Jamie, você pode querer que os subtotais sejam tratados visualmente em uma camada diferente, mas o que você pode tentar é usar o GROUPING() função na coluna. Esta função retorna 1 se for parte do GROUPING SETS subtotais e 0 se for uma coluna regular. http://technet.microsoft.com/en- us/library/ms178544(SQL.90).aspx

Incluí os dados de amostra com os quais testei. Remova o primeiro WITH emp_test AS () quando você usa a instrução select.

Meus dados de teste:
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 obter subtotais em coluna 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)