此查询...
SELECT ACTNO,SUM(PLAN) AS 'TOTAL PLAN', SUM(FORECAST) AS 'TOTAL FORECAST'
FROM COST_CENTER
GROUP BY ACTNO
我得到以下结果:
ACTNO | TOTAL PLAN | TOTAL FORECAST
100 | 12000 | 20000
101 | 12000 | 20000
200 | 1000 | 1500
201 | 1200 | 2000
202 | 900 | 1500
203 | 700 | 1500
220 | 1500 | 3500
300 | 1200 | 2000
301 | 1000 | 3000
我需要将某些帐户组合在一起,获取这些组的小计,然后将所有小计添加到总计中。
期望的结果将是:
ACTNO | TOTAL PLAN | TOTAL FORECAST
100 | 12000 | 20000
101 | 12000 | 20000
24000 40000
200 | 1000 | 1500
201 | 1200 | 2000
202 | 900 | 1500
203 | 700 | 1500
3800 6500
220 | 1500 | 3500
300 | 1200 | 2000
301 | 1000 | 3000
3700 8500
Total 31500 55000
这让我有点接近,但不是我喜欢的格式。
SELECT ACTNO, SUM(PLAN), SUM(FORECAST)
FROM COST_CENTER
WHERE (ACTNO IN ('100','101'))
GROUP BY ACTNO WITH ROLLUP
...
ACTNO | |
NULL | 24000 | 40000
100 | 12000 | 20000
101 | 12000 | 20000
感谢您的时间和帮助。
答案 0 :(得分:2)
您可以更好地控制分组集:
SELECT ACTNO, grp, SUM(PLAN), SUM(FORECAST)
FROM (SELECT cc.*,
(CASE WHEN ACTNO IN ('100', '101') THEN 1
WHEN ACTNO IN ('200', '201', '202', '203') THEN 2
WHEN ACTNO IN ('220', '300', '301') THEN 3
END) as grp
FROM COST_CENTER cc
) cc
GROUP BY GROUPING SETS ( (ACTNO, grp), (grp), ());
您可以从grp
中删除SELECT
。 。 。但是,我从未使用GROUPING SETS
而不包括列。