admin

分组集:在其他特定列中显示分类汇总?

sql

是否可以在其他特定列中显示小计?

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。

谢谢


阅读 167

收藏
2021-07-01

共1个答案

admin

我同意杰米的观点,您可能希望小计在不同的图层中可视化处理,但是您可能想尝试的是使用GROUPING()列上的函数。如果它是GROUPING SETS小计的一部分,则此函数返回1;如果它是常规列,则返回0。http://technet.microsoft.com/zh-
cn/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)
2021-07-01