ORACLE:条件GROUP BY取决于SELECT子句

时间:2015-02-12 11:58:00

标签: oracle group-by

我遇到了需要根据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

我只需知道这是正确的方法,或者我该如何解决这个问题?

1 个答案:

答案 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;