0

我正在尝试创建一个包含每个组摘要的报告。例如:

ID NAME COUNT TOTAL TYPE
-------------------------------------------------- ------------
1 测试 1 10 A
2 测试 2 8 A
                                               18

7 测试先生 9 B
12 XYZ 4 乙
                                               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)。

4

3 回答 3

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 应该在括号中的 ROLLUP 中集中在一起)

于 2010-02-26T19:55:49.927 回答
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。甚至命令窗口都不起作用...

于 2010-02-26T19:36:27.480 回答
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 ;
于 2010-02-26T19:59:13.580 回答