こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

こんにちは、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++
でおこなっています。

投稿日時 - 2004-04-28 09:41:08

QNo.842979

暇なときに回答ください

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

集合関数を使用していることから直積でも問題がないかと思います。
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
;
いかがでしょうか?

投稿日時 - 2004-04-28 13:09:42

お礼

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

投稿日時 - 2004-04-28 16:48:02

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

投稿日時 - 2004-04-28 11:43:17

ANo.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をそれぞれ副問い合わせを分けているのですか?

投稿日時 - 2004-04-28 11:06:11

お礼

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

投稿日時 - 2004-04-28 13:34:05

あなたにオススメの質問