以下のクエリを実行し、すべての列にエイリアス名を使用しています。. でエイリアスに名前を付けました。それが要件だからです。ここで、where 句でエイリアス名を直接参照したいのですが、次のようにします。
SELECT pt.prod_desc AS"PROD_DESC",
(
CASE
WHEN pt.prod_level='2'
THEN 'Product'
WHEN pt.prod_level='4'
THEN 'Sub-Product'
WHEN pt.prod_level='5'
THEN 'Service'
ELSE 'N/A'
END) AS"PROD_LEVEL",
prod_id AS "PROD_ID",
isactive AS "IsActive",
updt_usr_sid AS "UPDT_USR_SID",
updt_ts AS "UPDT_TS",
(
CASE
WHEN pt.prod_level='5'
THEN parent_prod_id
ELSE NULL
END) AS ".SUB_PROD_ID",
(
CASE
WHEN pt.prod_level='5'
THEN
(SELECT prod_desc FROM dims_prod_type A WHERE A.prod_id= pt.parent_prod_id
)
ELSE 'N/A'
END ) AS ".SUB_PROD_DESC",
(
CASE
WHEN pt.prod_level='4'
THEN parent_prod_id
WHEN pt.prod_level='5'
THEN
(SELECT parent_prod_id
FROM dims_prod_type A
WHERE A.prod_id= pt.parent_prod_id
)
ELSE NULL
END) AS ".PRNT_PROD_ID",
(
CASE
WHEN pt.prod_level='4'
THEN
(SELECT prod_desc FROM dims_prod_type A WHERE A.prod_id=pt.parent_prod_id
)
WHEN pt.prod_level='5'
THEN
(SELECT prod_desc
FROM dims_prod_type A
WHERE A.prod_id IN
(SELECT B.parent_prod_id
FROM dims_prod_type B
WHERE b.prod_id=pt.parent_prod_id
)
)
ELSE 'N/A'
END)AS ".PRNT_PROD_DESC"
FROM dims_prod_type pt
WHERE pt.".PRNT_PROD_ID" like 'A%';
ただし、これを実行すると、次のエラーが発生します。
SQL Error: ORA-00904: "PT".".PRNT_PROD_ID": invalid identifier
00904. 00000 - "%s: invalid identifier"
SQL が最初に where 句を実行することを知っているため、それがエラーの原因です。しかし、どうすればこれを修正できますか? 何か提案はありますか?