• ベストアンサー

副問い合わせで複数の列を返す

こんにちは、Makotoと申します。 SQLの副問い合わせで質問があるのですが、 現在のSQLは CREATE OR REPLACE VIEW VIWTEST AS SELECT KOMOKU1, KOMOKU2 (SELECT SUM(KOMOKU3) FROM TBL WHERE A = 1 (SELECT SUM(KOMOKU4) FROM TBL WHERE A = 1 (SELECT SUM(KOMOKU5) FROM TBL WHERE A = 1 FROM M_TBL; という感じのSQLなのですが、副問い合わせの所 が見ているテーブルも条件も一緒なので1つにまとめたいのですが、うまくいきません。CURSORという関数があったのですが、VIEWでは使用できませんでした。なにかよい方法はないでしょうか? 開発環境は oracle 9i(AIX) pro*C/C++ でおこなっています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

集合関数を使用していることから直積でも問題がないかと思います。 CREATE OR REPLACE VIEW VIWTEST AS SELECT A.KOMOKU1,A.KOMOKU2,B.KOMOKU3,B.KOMOKU4,B.KOMOKU5 FROM M_TBL A, (SELECT SUM(KOMOKU1) KOMOKU1, SUM(KOMOKU2) KOMOKU2, SUM(KOMOKU3) KOMOKU3 FROM TBL WHERE A = 1) B ; 1999構文では CREATE OR REPLACE VIEW VIWTEST AS SELECT A.KOMOKU1,A.KOMOKU2,B.KOMOKU3,B.KOMOKU4,B.KOMOKU5 FROM M_TBL A CROSS JOIN (SELECT SUM(KOMOKU1) KOMOKU1, SUM(KOMOKU2) KOMOKU2, SUM(KOMOKU3) KOMOKU3 FROM TBL WHERE A = 1) B ; いかがでしょうか?

mako-kwnsh
質問者

お礼

お返事ありがとうございました。 kazuho_gooさんに書いていただいたSQL のような感じで、FROM句に複数の列が返る 副問い合わせを書き、それに名前をつけ SELECT句で指定してやるとうまく取得することが できました。 ありがとうございます。

その他の回答 (2)

  • yutopapa
  • ベストアンサー率47% (139/295)
回答No.2

#1です。 ごめんなさい。副問い合わせで複数の列を返そうとするとエラーとなってしまいますね。 違う方法を考えてみます。思いついたらまた回答しますね。

  • yutopapa
  • ベストアンサー率47% (139/295)
回答No.1

外してたらごめんなさい。 CREATE OR REPLACE VIEW VIWTEST AS SELECT KOMOKU1, KOMOKU2, (SELECT SUM(KOMOKU3), SUM(KOMOKU4), SUM(KOMOKU5) FROM TBL WHERE A = 1) FROM M_TBL; で、単純に良いような気がするのですが・・・。 何故KOMOKU3~5をそれぞれ副問い合わせを分けているのですか?

mako-kwnsh
質問者

お礼

お返事ありがとうございます。 はじめは私もそう思ってやってみたのですが、 上記の感じSQLを実行すると複数の問い合わせで エラーになってしまいました。でいろいろ試行錯誤 した結果別々の副問い合わせになってしまいました。

関連するQ&A