我有一个 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
。有什么建议吗?
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)
使用内联视图:
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;
希望有帮助...
作为附加输入,虽然它与该线程无关,但您也可以聚合您的 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;
为什么不:
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