- PR -

Oracleでサブクエリの結果を基にSELECTする方法

1
投稿者投稿内容
へるまろ
ベテラン
会議室デビュー日: 2003/02/04
投稿数: 57
お住まい・勤務地: 東京
投稿日時: 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/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 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
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 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 結合条件)

でいいのでは
へるまろ
ベテラン
会議室デビュー日: 2003/02/04
投稿数: 57
お住まい・勤務地: 東京
投稿日時: 2006-01-05 09:58
ぶさいくろうさん、明智重蔵さん
レスありがとうございます。

結局明智重蔵さんに教えて頂いた方法でうまくいったので、そちらの方法でやってみることにしました。

本当にありがとうございました。
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)