- - PR -
Oracleでサブクエリの結果を基にSELECTする方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-12-29 18:05
Oracle10gを使用しています。
A,B,Cという3つのテーブルを結合するサブクエリーを基にして、ある条件に合致する行数を返すクエリを記述したいのですが、 SELECT (SELECT COUNT(*) FROM Temp WHERE Temp.ID = 1), (SELECT COUNT(*) FROM Temp WHERE Temp.ID = 2), (SELECT COUNT(*) FROM Temp WHERE Temp.ID = 3) FROM (SELECT ID FROM A, B ,C WHERE 結合条件) Temp のように記述すると、FROM句の中ではサブクエリーの別名であるTempを参照できないらしく「ORA--00936 式がありません」というエラーが出てしまい、 DECLARE v_tempの変数定義 BEGIN SELECT (SELECT COUNT(*) FROM v_temp WHERE v_temp.ID = 1), (SELECT COUNT(*) FROM v_temp WHERE v_temp.ID = 2), (SELECT COUNT(*) FROM v_temp WHERE v_temp.ID = 3) INTO v_temp FROM SELECT ID FROM A, B ,C WHERE 結合条件 END と記述しようにもどのように変数定義をすればよいのか分からない状況です。 T-SQLの場合だと一時テーブルなどを使うのかもしれませんが、PL/SQLの場合はどのように記述すれば、一度のクエリで実現が可能でしょうか? 宜しくお願いいたします。 |
|
投稿日時: 2005-12-29 22:08
SELECT
(SELECT COUNT(*) FROM Temp WHERE Temp.ID = 1), (SELECT COUNT(*) FROM Temp WHERE Temp.ID = 2), (SELECT COUNT(*) FROM Temp WHERE Temp.ID = 3) FROM ( SELECT * FROM (SELECT ID FROM A, B ,C WHERE 結合条件) ) Temp |
|
投稿日時: 2006-01-05 09:07
select
sum(decode(Temp.ID,1,1,0), sum(decode(Temp.ID,2,1,0), sum(decode(Temp.ID,3,1,0) from (SELECT ID FROM A, B ,C WHERE 結合条件) でいいのでは |
|
投稿日時: 2006-01-05 09:58
ぶさいくろうさん、明智重蔵さん
レスありがとうございます。 結局明智重蔵さんに教えて頂いた方法でうまくいったので、そちらの方法でやってみることにしました。 本当にありがとうございました。 |
|
投稿日時: 2006-01-05 14:57
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_kj04_2.htm
withを使って、 SELECT ID FROM A, B ,C WHERE 結合条件 をtempとして定義する方法もアリ |
1