Oracle CASE
を使用して日付列がより小さいまたはより大きい現在の日付であるかどうかを比較するSQLクエリがあります。しかし、どのようにCASE
- statementを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;
それが役に立てば幸い...
追加の入力として、このスレッドには関係ありませんが、group by句で言及せずにcaseステートメントを集約することもできます。
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;