J'ai une requête SQL où j'utilise Oracle CASE
pour comparer si une colonne de date est inférieur à ou supérieur à date actuelle Mais comment utiliser cette instruction CASE
- dans une instruction GROUP BY
-? J'aimerais compter les enregistrements dans chaque cas.
Par exemple.
select
(case
when exp_date > sysdate then 1
when exp_date <= sysdate then 2
else 3
end) expired, count(*)
from mytable
group by expired
Mais je reçois une erreur en essayant ceci: ORA-00904
. Aucune suggestion?
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)
Utilisez une vue en ligne:
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;
J'espère que ça aide...
En tant qu'entrée supplémentaire, bien que cela ne soit pas lié à ce fil, vous pouvez également agréger vos déclarations de cas sans le mentionner dans la clause 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;