我有一个SQL查询,在这里我使用Oracle来比较一个日期列是否小于或大于当前日期。但是我如何在CASE-statement中使用这个GROUP BY-statement呢?我想清点每一宗个案的纪录。
例如。
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。有什么建议吗?
发布于 2012-07-04 08:30:56
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)发布于 2012-07-04 08:31:58
使用内联视图:
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;希望能帮上忙..。
发布于 2016-04-15 10:50:21
作为附加输入,虽然它与此线程无关,但您也可以聚合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;https://stackoverflow.com/questions/11325268
复制相似问题