小計を別のレイヤーで視覚的に処理したいかもしれないジェイミーに同意しますが、試してみたいのは GROUPING()
を使用することです 列の関数。 GROUPING SETS
の一部である場合、この関数は 1 を返します。 小計、通常の列の場合は 0。 http://technet.microsoft.com/en- us/library/ms178544(SQL.90).aspx
テストしたサンプルデータを含めました。最初の WITH emp_test AS ()
を削除します select ステートメントを使用する場合。
私のテストデータ:
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)