我正在尝试创建一个包含每个组摘要的报告。例如:
ID NAME COUNT TOTAL TYPE ------------------------------------------------------------- 1 Test 1 10 A 2 Test 2 8 A 18 7 Mr. Test 9 B 12 XYZ 4 B 13 25 ABC 3 C 26 DEF 5 C 19 GHIJK 1 C 9
我有一个查询可以执行除TOTAL列以外的所有操作:
select sd.id DATA_REF_NUM ID, count(sd.DATA_DEF_ID) COUNT, defs.data_name NAME, sd.type
from some_data sd, data_defs defs
where sd.data_def_id = defs.data_def_id
group by some_data.type, some_data.id, defs.data_nam
order by some_data.id asc, count(amv.MSG_ID) desc ;
我只是不确定如何获得关于群组的摘要。在这种情况下,我正在尝试为每组ID获得COUNT的总和。
更新
群组是按类型划分的。在原帖中忘了。
TOTAL是每个组的SUM(COUNT)。
答案 0 :(得分:3)
如何使用ROLLUP ...
select sd.id DATA_REF_NUM ID, count(sd.DATA_DEF_ID) COUNT, defs.data_name NAME, sd.type
from some_data sd, data_defs defs
where sd.data_def_id = defs.data_def_id
group by ROLLUP(some_data.type, (some_data.id, defs.data_nam))
order by some_data.id asc, count(amv.MSG_ID) desc ;
这适用于我的数据库中的类似示例,但我只在两列上完成,不知道它将如何运行更多...
希望这是有帮助的,
克雷格...
编辑:在ROLLUP中,你想要总结但不是像id和data_nam那样的小计的列应该在parantheses中的ROLLUP中集中在一起)
答案 1 :(得分:1)
假设SQL * Plus,您可以这样做:
col d1 noprint
col d2 noprint
WITH q AS
(SELECT sd.id, count(sd.DATA_DEF_ID) COUNT, defs.data_name NAME, sd.type
FROM some_data sd JOIN data_defs defs ON (sd.data_def_id = defs.data_def_id)
GROUP BY some_data.type, some_data.id, defs.data_nam)
SELECT 1 d1, type d2, id, count, name FROM q
UNION ALL
SELECT 2, type, null, null, null, SUM(count) FROM q GROUP BY 2, type
ORDER BY 2,1,3;
我不能在PL / SQL Developer 8中只使用SQL * Plus。甚至命令窗口都不起作用......
答案 2 :(得分:0)
尝试使用子查询返回该类型的所有项目的计数。这会
select sd.id DATA_REF_NUM ID, count(sd.DATA_DEF_ID) COUNT, tot.TOTAL_FOR_TYPE, defs.data_name NAME, sd.type
from some_data sd, data_defs defs,
(select count(sd2.DATA_DEF_ID) TOTAL_FOR_TYPE
from some_data sd2
where sd2.type = sd.type) tot
where sd.data_def_id = defs.data_def_id
group by some_data.type, some_data.id, defs.data_nam
order by some_data.id asc, count(amv.MSG_ID) desc ;