dポイントプレゼントキャンペーン実施中!

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

A 回答 (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
;
いかがでしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/04/28 16:48

#1です。


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

外してたらごめんなさい。



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をそれぞれ副問い合わせを分けているのですか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/04/28 13:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!