it-swarm.com.de

Wie verwende ich Group By basierend auf einer Case-Anweisung in Oracle?

Ich habe eine SQL-Abfrage, bei der ich Oracle CASE verwende, um zu vergleichen, ob eine Datumsspalte kleiner als oder größer als aktuelles Datum ist. Aber wie verwende ich diese CASE-Anweisung in einer GROUP BY-Anweisung? Ich möchte die Datensätze in jedem Fall zählen.

Z.B.

select
    (case
        when exp_date > sysdate then 1
        when exp_date <= sysdate then 2
        else 3
     end) expired, count(*)
from mytable
group by expired

Ich erhalte jedoch eine Fehlermeldung, wenn ich Folgendes ausprobiere: ORA-00904. Irgendwelche Vorschläge?

10
Jonas
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)
13
paul

Verwenden Sie eine Inline-Ansicht:

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;

Ich hoffe es hilft...

12
Ollie

Als zusätzliche Eingabe können Sie, obwohl sie sich nicht auf diesen Thread bezieht, Ihre case-Anweisungen zusammenfassen, ohne sie in der group by-Klausel zu erwähnen.

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;
0
JayKayOf4