Я согласен с Джейми, возможно, вы хотите, чтобы промежуточные итоги визуально обрабатывались в другом слое, но вы можете попробовать использовать функцию 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)