ORACLE DECODIEREN mit mehreren Ausdrücken oder mehrere dekodiert
Habe ich die unter Daten in einer Oracle-Tabelle, die ich versuche zum durchführen von Berechnungen basierend auf der ART & QT Spalten.
TYPE QT STATUS CNT
---- -- ------ ---
E A YES 123
E A NO 2540
E D YES 2
E D NO 787
O A YES 884
O A NO 6957
O D YES 25
O D NO 1360
Sieht aus wie meine erwartete Ausgabe ist jetzt anders.. wie unten :
TYPE TOTAL A A&Y
---- ----- ---- -----
E+O 12678 10504 1007
E 3452 2663 123
Meinem alten oracle-sql ist unten, aber die Ausgabe ist falsch, bei der Berechnung der Prozentsätze:
SELECT * FROM (
SELECT NVL(SUM(DECODE(A.QT,'A',A.CNT,'D',A.CNT)),0) AS "TOTAL",
NVL(SUM(DECODE(A.QT,'A',A.CNT)),0) AS "A ALL",
NVL(SUM(DECODE(A.QT,'A',ROUND(100*(NVL(A.CNT,0)/A.CNT),2))),0) "A ALL %",
NVL(SUM(DECODE(A.STATUS,'E',A.CNT)),0) AS "E TOTAL",
NVL(SUM(DECODE(A.STATUS,'E',DECODE(A.QT,'A',A.CNT))),0) AS "E & A TOTAL"",
NVL(SUM(DECODE(A.STATUS,'E',ROUND(100 * SUM((DECODE(A.QT,'A',A.CNT)) /SUM(A.CNT)),3))),0) "E & A %"
FROM ALLIN A)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Abfrage schreiben, in einer etwas besser lesbaren Weise mit einer common table expression;
Diese Abfrage erzeugt das erwartete Ergebnis und ist ein bisschen einfacher zu Lesen und zu Debuggen. Die
EA
Teil geht davon aus, dass qt und Art sind jeweils ein Buchstabe, also eine Verkettung von Ihnen Spiele von EA. Wenn das nicht stimmt, empfehle ich einCASE
statt, a ' la;Ein SQLfiddle zum testen mit.