是否可以在其他特定列中显示小计?
SELECT deptno,empno,SUM(sal) as sum_salary FROM emp_test 3 GROUP BY GROUPING SETS ((DeptNo,Empno),(DeptNo),())
实际上,我得到以下结果:
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
我该怎么办?:
DEPTNO EMPNO SUM(SAL) Subtotals 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
注意:我不能使用ROLLUP或CUBE。
谢谢
我同意杰米的观点,您可能希望小计在不同的图层中可视化处理,但是您可能想尝试的是使用GROUPING()列上的函数。如果它是GROUPING SETS小计的一部分,则此函数返回1;如果它是常规列,则返回0。http://technet.microsoft.com/zh- cn/library/ms178544(SQL.90).aspx
GROUPING()
GROUPING SETS
我包括了我测试过的样本数据。WITH emp_test AS ()使用select语句时,请删除第一个。
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)