如何根据Oracle中的Case语句使用Group By?

时间:2012-07-04 08:28:30

标签: sql oracle group-by case

我有一个SQL查询,我使用Oracle CASE来比较日期列是小于还是大于当前日期。但是如何在CASE语句中使用GROUP BY - 语句?我想在每种情况下统计记录。

E.g。

select
    (case
        when exp_date > sysdate then 1
        when exp_date <= sysdate then 2
        else 3
     end) expired, count(*)
from mytable
group by expired

但是我在尝试这个时遇到错误:ORA-00904。有什么建议吗?

3 个答案:

答案 0 :(得分:14)

select
(case
    when exp_date > sysdate then 1
    when exp_date <= sysdate then 2
    else 3
 end) expired, count(*)
from mytable
group by (case
    when exp_date > sysdate then 1
    when exp_date <= sysdate then 2
    else 3
 end)

答案 1 :(得分:12)

使用内联视图:

SELECT expired,
       count(*)
  FROM (SELECT (CASE
                   WHEN exp_date > SYSDATE THEN 1
                   WHEN exp_date <= SYSDATE THEN 2
                   ELSE 3
                 END) AS expired
          FROM mytable)
GROUP BY expired;

希望它有所帮助...

答案 2 :(得分:0)

作为附加输入,虽然它与此线程无关,但您也可以聚合case语句而不在group by子句中提及它。

SELECT
   WORK_ORDER_NUMBER,
   SUM(CASE WHEN STOCK_CODE LIKE 'xxxx' THEN STOCK_QUANTITY ELSE 0 END) AS TOTAL
FROM Table
GROUP BY WORK_ORDER_NUMBER;