これは機能します:
SELECT (CASE
WHEN x = 'value' THEN
a.col1
ELSE
nvl(a.col1, a.col2)
END)
FROM table1 a
WHERE a.this = 'that'
GROUP BY (CASE
WHEN x = 'value' THEN
a.col1
ELSE
nvl(a.col1, a.col2)
END)
しかし、caseステートメントにINステートメントを実行させようとすると(ここではより動的なSQLを試行します)、次のコードはORA-00979エラーになります。
SELECT (CASE
WHEN x IN (SELECT me FROM here WHERE this = 'example') THEN
a.col1
ELSE
nvl(a.col1, a.col2)
END)
FROM table1 a
WHERE a.this = 'that'
GROUP BY (CASE
WHEN x IN (SELECT me FROM here WHERE this = 'example') THEN
a.col1
ELSE
nvl(a.col1, a.col2)
END)
これを機能させることは可能ですか、それとも代替手段を用意することは可能ですか?ありがとう。-ジョナス
Benoit:エラーを再現するSQLに基づいて変更されたSQLは次のとおりです。
select (case when a.y IN (select 'A'||ROWNUM from dual where rownum=1) then 1 else 0 end)
from (SELECT 'A'||ROWNUM y, 'B' x FROM DUAL CONNECT BY ROWNUM <= 3) a where x = 'B'
group by (case when a.y IN (select 'A'||ROWNUM from dual where rownum=1) then 1 else 0 end)
;
基本的に欠落していたのは、FROMテーブルに複数の値が必要であり、CASEステートメントで列が参照されていることでした。