0

各グループの概要を記載したレポートを作成しようとしています。例えば:

IDNAMECOUNT合計タイプ
-------------------------------------------------- -----------
1テスト110A
2テスト28A
                                               18

7テスト氏9B
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)です。

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 ;

これは私のデータベースの同様の例で機能しますが、2つの列でのみ実行し、それ以上でどのように機能するかはわかりません...これがお役に立てば幸いです

Craig ...

編集:ロールアップでは、idやdata_namのように合計したいが小計ではない列は、括弧内のロールアップ内にまとめる必要があります)

于 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 に答える