Как использовать Group By на основе оператора Case в Oracle?
у меня есть 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
. Есть предложения?
3 ответов
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;