這工作:遭遇ORA-00979:不是GROUP BY表達式中使用CASE時 - 在SQL中的語句
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語句做一個陳述(試圖更加動態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)
是否有可能使這項工作或有替代?謝謝。 --Jonas
伯努瓦:這是基於你的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語句中被引用。
什麼版本的Oracle您使用的是? – 2010-09-29 08:08:37
忘記了添加。我們正在使用Oracle 10g – jonasespelita 2010-09-29 08:13:02
您最後的選擇適用於Oracle 11gR2,而不是v9。 – Benoit 2010-09-29 09:10:39