Альтернатива ROLLUP - PullRequest
       1

Альтернатива ROLLUP

1 голос
/ 27 октября 2011

Мне нужно рассчитать промежуточные итоги в отдельной строке, но я не могу использовать ROLLUP или CUBE (потому что это запрещено) Я использую SQL Server 2008. Есть другой способ получить результаты? заранее спасибо!

SELECT deptno, empno, SUM (sal) 2 FROM emp_test 3 GROUP BY ROLLUP (deptno, empno);

DEPTNO      EMPNO   SUM(SAL)

    10       7782      20000
    10       7839      10000
    10                 30000
    20       7566       5950
    20       7788       6000
    20       7902       6000
    20                 17950
    30       7698      20000
    30       7699      20000
    30                 40000
                       87950

Ответы [ 3 ]

2 голосов
/ 27 октября 2011

Вы можете попробовать использовать функцию GROUPING() в столбце. Эта функция возвращает 1, если она является частью промежуточных итогов GROUPING SETS, и 0, если это обычный столбец. http://technet.microsoft.com/en-us/library/ms178544(SQL.90).aspx

Я включил образцы данных, которые я тестировал. Удалите первый WITH emp_test AS () при использовании оператора выбора.

Мои данные испытаний:

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
)

Фактический запрос ниже:

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)
1 голос
/ 27 октября 2011

Если у вас есть SQL Server 2008, вы можете рассмотреть Группирующие наборы вместо?

Для вашего случая я думаю, что это будет:

SELECT deptno
,empno
,SUM(sal) as sum_salary
FROM emp_test 3 
GROUP BY GROUPING SETS
((DeptNo,Empno),())

Но у меня есть2005, так что не могу это проверить!

0 голосов
/ 27 октября 2011

вы скорее пишете процедуру, используя Cursor для получения аналогичного результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...