
お世話になっています。
現在下記のようなSQLを組んでいます。
ビュー1の集計結果
UNION ALL
ビュー2の集計結果
UNION ALL
ビュー3の集計結果
実行結果 例
年月 人数 金額
201104 3 20000
201105 2 10000
201104 1 5000
GROUP BY句で年月を集計したビューをUNION ALLでつないでいるため、
当然のように同じ年月が何度も出てくるため、テストがしづらくなっています。
やりたいこととしては、さっきの実行結果をさらに年月で集計することを
考えています。
年月 人数 金額
201104 4 25000
201105 2 10000
対策として、下記のように集計したビューをUNION ALLでつないだ結果を
さらに集計するSQLを作りました。
SELECT
FROM(
ビュー1の集計結果
UNION ALL
ビュー2の集計結果
UNION ALL
ビュー3の集計結果
)
GROUP BY
その結果、下記のエラーが発生しました。
ORA-00935:グループ関数のネスト・レベルが深すぎます。
環境はoracle11gです。
あとは、SQLのFROM句の()の部分をビューとして作成し、
更にそのビューを呼び出して集計するくらいしか思いつかないです。
今回作ろうとしてるのはテスト用のSQLのため、SQL文と実行結果を残したいので、
できればビューやプロシージャーは作らずに、SQLのみで作成したいと考えています。
何か良い方法はありますでしょうか?
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
この回答への補足
早々と回答ありがとうございます。
グループ関数は2回までしか使っていません。
あくまで、ビューAの集計結果とビューBの集計結果で集計がやりたいだけですので、
2回です。
No.3
- 回答日時:
これじゃダメですか?
SELECT
TO_CHAR(V_SYORI_YM, 'YYYYMM') AS "年月" ,
SUM(V_A_CHAG),
SUM(V_B_CHAG),
SUM(V_C_CHAG),
SUM(V_ALL_CHAG)
FROM
(
SELECT
V_SYORI_YM,
V_A_CHAG,
V_B_CHAG,
V_C_CHAG,
V_ALL_CHAG
FROM
V_001
WHERE
V_CRT_DTS >= TO_DATE('20110401', 'YYYYMMDD') AND
V_CRT_DTS < TO_DATE('20120401', 'YYYYMMDD')
UNION ALL
SELECT
V_SYORI_YM,
V_A_CHAG,
V_B_CHAG,
V_C_CHAG,
V_ALL_CHAG
FROM
V_002I
WHERE
V_SYORI_YM >= TO_DATE('20110401', 'YYYYMMDD') AND
V_SYORI_YM < TO_DATE('20120401', 'YYYYMMDD')
)
GROUP BY
TO_CHAR(V_SYORI_YM, 'YYYYMM');
No.2
- 回答日時:
> ビュー1の集計結果
> UNION ALL
> ビュー2の集計結果
> UNION ALL
> ビュー3の集計結果
のビューのSQLの概略と
> SELECT
> FROM(
> ビュー1の集計結果
> UNION ALL
> ビュー2の集計結果
> UNION ALL
> ビュー3の集計結果
> )
> GROUP BY
の実際の記述全体を提示できますか?
この回答への補足
全体の記述は下記のとおりです。
そのまま転載するわけにはいかないので、ビュー名、項目名等は変更してあります。
SELECT "処理年月" AS "年月" ,SUM("調定額_A") ,SUM("調定額_B)" ,SUM("調定額_C)" ,SUM("調定額_合計)"
FROM (
SELECT SUBSTR(TO_CHAR(V_SYORI_YM,'YYYYMMDD'),1,6) AS "処理年月"
, SUM(V_A_CHAG) AS "調定額_A" , SUM(V_B_CHAG) AS "調定額_B"
, SUM(V_C_CHAG) AS "調定額_C" , SUM(V_ALL_CHAG) AS "調定額_合計"
FROM V_001
WHERE TO_DATE(TO_CHAR(V_CRT_DTS,'YYYYMMDD'),'YYYYMMDD') >= TO_DATE('20110401','YYYYMMDD')
AND TO_DATE(TO_CHAR(V_CRT_DTS,'YYYYMMDD'),'YYYYMMDD') < TO_DATE('20120401','YYYYMMDD')
GROUP BY SUBSTR(TO_CHAR(V_SYORI_YM,'YYYYMMDD'),1,6)
UNION ALL
SELECT SUBSTR(TO_CHAR(V_SYORI_YM,'YYYYMMDD'),1,6) AS "処理年月" , SUM(V_A_CHAG) AS "調定額_A" , SUM(V_B_CHAG) AS "調定額_B"
, SUM(V_C_CHAG) AS "調定額_C" , SUM(V_ALL_CHAG) AS "調定額_合計"
FROM V_002I
WHERE V_SYORI_YM >= TO_DATE('20110401','YYYYMMDD')
AND V_SYORI_YM < TO_DATE('20120401','YYYYMMDD')
GROUP BY SUBSTR(TO_CHAR(V_SYORI_YM,'YYYYMMDD'),1,6)
)
GROUP BY "処理年月" AS "年月"
FROM()の中身がビューの集計結果をUNIONALLでつないだものです。
内容はGROUPBY句で年月を指定して、SUMで集計してるだけのシンプルなものです。
今回は、これを更にもう1度集計し、同じ年月が複数回出てくるのを阻止しようとしています。
そのため、集計は2回行ってますが、2回ではoracleのエラーにはひっかからないはずなのですが、
そこがよくわかりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
orace SQL文のエラー(ORA-0092...
-
osqleditについて
-
Oracleですがsqlで質問です。 ...
-
バッチファイルで複数フォルダ...
-
続.ORACLEのSELECTのソートに...
-
SQLで日付+時間で絞り込みたい
-
PL/SQLの変数の命名規則
-
ワークテーブルって何?
-
副問合せにLIKE文を使う方法は...
-
Googleで、よく行くお店の口コ...
-
64bit端末でのOLEDB接続に関して
-
10営業日前の日付を取得したい...
-
オラクル12C_SQLPlusで実行す...
-
sqlで質問です。 Aテーブルは店...
-
SQLの中上級者へのレベルアップ...
-
SELECTによる表の変換方法を教...
-
開発対象となるアプリケーショ...
-
質問です。 下記のテーブルとデ...
-
sqlで質問です。 Aテーブルの登...
-
sqlで質問です。 Aテーブルの情...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UNION ALLでつなげた複数ビュー...
-
小数点のある数値で整数部のみ...
-
SQLにて列の値を一まとめにして...
-
WHERE 正規表現
-
case whenとsum関数の併用について
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
sqlに記述できない文字
-
SQLサーバに対するSQL文で抽出...
-
UPDATEで既存のレコードに文字...
-
エラーを起こす方法
-
truncate tableを使って複数の...
-
既存データをINSERT文にして出...
-
timestampのデータはどのように...
-
オラクルのUPDATEで複数テーブル
-
SQLで、Join句で結合したテ...
-
PostgreSQLのtimestamp型で時間...
-
Accessの構成をコピーしたい
-
'modify' 付近に不適切な構文が...
おすすめ情報