【发布时间】:2011-04-18 16:42:09
【问题描述】:
这行得通:
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 语句中引用了一个列。
【问题讨论】:
-
您使用的是什么版本的 Oracle?
-
忘记添加了。我们正在使用 Oracle 10g
-
您最后的选择适用于 Oracle 11gR2,而不是 v9。
-
感谢 Benoit,确认它在 11g 中有效。不幸的是,我们被困在 10g 上,我希望找到解决方法。
标签: sql oracle plsql ora-00979