• 締切済み

単一グループのグループ関数ではありませんについて

以下の様なテーブルがあります。 SOSHIKI_CODE SYAIN_CLS DEL_DATE A部 0 A部 1 B部 1 B部 2 C部 3 組織毎の社員クラスをカウントしたいのですが、 以下のSQLを実行すると ORA-00937: 単一グループのグループ関数ではありません。 のエラーがでます。 どこがいけないのでしょうか。 いけない理由が知りたいのですが。 また、どこを直せばよいのでしょうか。 select soshiki_code -- ,syain_cls ,max(decode(syain_cls,'0',count(*),NULL)) ,max(decode(syain_cls,'1',count(*),NULL)) ,max(decode(syain_cls,'2',count(*),NULL)) ,max(decode(syain_cls,'3',count(*),NULL)) from syain_mst where del_date is NULL group by soshiki_code ,syain_cls order by soshiki_code ;

みんなの回答

  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.2

すんなりかけました。 SELECT soshiki_code, sum(decode(syain_cls, '0', 1, NULL)) AS cls0_count, sum(decode(syain_cls, '1', 1, NULL)) AS cls1_count, sum(decode(syain_cls, '2', 1, NULL)) AS cls2_count, sum(decode(syain_cls, '3', 1, NULL)) AS cls3_count FROM syain_mst WHERE del_date IS NULL GROUP BY soshiki_code ORDER BY soshiki_code ; グループ関数maxの中にグループ関数countがあったためにエラーになっていたように思います。

abc999xyz
質問者

お礼

ありがとうございます。 グループ関数の中にグループ関数がいけないのですね。 countもグループ関数です。 エラーメッセージの通りになります。

  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.1

どこがいけないのか説明が難しくてできませんが、 やりたいことはこのようなことでしょうか。 WITH s AS ( SELECT soshiki_code, decode(syain_cls, '0', 1, NULL) AS c0, decode(syain_cls, '1', 1, NULL) AS c1, decode(syain_cls, '2', 1, NULL) AS c2, decode(syain_cls, '3', 1, NULL) AS c3 FROM syain_mst WHERE del_date IS NULL ) SELECT soshiki_code, sum(c0) AS cls0_count, sum(c1) AS cls1_count, sum(c2) AS cls2_count, sum(c3) AS cls3_count FROM s GROUP BY soshiki_code ORDER BY soshiki_code 結果 SOSHIKI_CODE CLS0_COUNT CLS1_COUNT CLS2_COUNT CLS3_COUNT A部 1 1 « NULL » « NULL » B部 « NULL » 1 1 « NULL » C部 « NULL » « NULL » « NULL » 1

abc999xyz
質問者

お礼

ありがとうございます。 with句を使われていますが、 select文中のselect文の副問合せ見たいにしないと ダメなんですね。 説明も難しいですね。