我遇到了需要根据GROUP BY
子句使用条件SELECT
子句的情况,这里是我的代码而不是实际代码,我只是试图创建一个虚拟示例。
CREATE TABLE temp
(
id NUMBER,
value1 NUMBER,
value2 NUMBER,
value3 NUMBER
);
INSERT INTO temp VALUES (1,100,100,100);
INSERT INTO temp VALUES (2,100,100,100);
INSERT INTO temp VALUES (3,100,100,100);
INSERT INTO temp VALUES (4,100,100,100);
SELECT
CASE
WHEN 2 > 1 THEN MIN(id)
WHEN 1 > 2 THEN MAX(id)
ELSE id
END,
value1,
value2,
value3
FROM temp
GROUP BY
CASE WHEN 2 > 1 THEN value1 END,
CASE WHEN 2 > 1 THEN value2 END,
CASE WHEN 2 > 1 THEN value3 END;
这里给出了以下错误
ORA-00979: not a GROUP BY expression
00979. 00000 - "not a GROUP BY expression"
*Cause:
*Action:
Error at Line: 18 Column: 9
我只需知道这是正确的方法,或者我该如何解决这个问题?
答案 0 :(得分:0)
GROUP BY CASE WHEN 2 > 1 THEN value1 END, CASE WHEN 2 > 1 THEN value2 END, CASE WHEN 2 > 1 THEN value3 END;
GROUP BY 子句中的 CASE表达式不正确。所有这些多个case语句都没有意义,并且语法不正确。你需要这样的东西 -
group by (
case
when condition1 then result1
when condition2 then result2
else result3
end)
OR,
使用内嵌视图。
SELECT ...
FROM (SELECT (case
when condition1 then result1
when condition2 then result2
else result3
end) alias_view
FROM your_table)
GROUP BY alias_view;