Oracle中如何使用基于Case语句的Group By?

问题描述 投票:0回答:4

我有一个 SQL 查询,我使用 Oracle

CASE
来比较日期列是否小于大于当前日期。但是我如何在
CASE
语句中使用
GROUP BY
语句呢?我想统计每种情况下的记录。

例如

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
。有什么建议吗?

sql oracle group-by case
4个回答
29
投票
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)

29
投票

使用内联视图:

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
投票

作为附加输入,虽然它与该线程无关,但您也可以聚合您的 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;

0
投票

为什么不:

select
    (case
        when exp_date > sysdate then 1
        when exp_date <= sysdate then 2
        else 3
     end) expired, count(*)
from mytable
group by exp_date
© www.soinside.com 2019 - 2024. All rights reserved.