SQL-Abfrage bezugl. Anzahl der Zeilen

hudo

Mitglied
Hallo,

Ich habe folgende Tabelle

CREATE TABLE COL_TABLE
(COL1 VARCHAR2(10),
COL2 VARCHAR2(10),
COL3 VARCHAR2(10),
COL4 NUMBER(4),
COL5 NUMBER(4));

mit folgenden Eintraegen:

COL1 COL2 COL3 COL4 COL5
AAA STA1 1 10 1
AAA STA1 1 11 60
AAA STA1 1 12 1
AAA STA1 2 19 50
AAA STA1 2 9 1
AAA STA2 1 9 1
AAA STA2 1 9 1
AAA STA2 3 9 40
AAA STA3 2 7 1
AAA STA3 2 17 1
AAA STA3 2 12 1

Als Ergebnis einer (oder mehrerer) SQL-Abfrage haette ich gerne:

COL1 COL2 TO_COL5 TOTAL
AAA STA1 1 3
AAA STA1 <>1 2
AAA STA2 1 2
AAA STA2 <>1 1
AAA STA3 1 3


Dies sieht einer Abfrage mit ROLLUP (ich benutze ORACLE) sehr aehnlich

SELECT COL1, COL2 ,COL5
,COUNT(*) "TOTAL"
FROM COL_TABLE
GROUP BY ROLLUP(COL1,COL2,COL5);

Ergebnis der ROLLUP-Abfrage:

COL1 COL2 COL5 TOT
AAA STA1 1 3
AAA STA1 50 1
AAA STA1 60 1
AAA STA1 5
AAA STA2 1 2
AAA STA2 40 1
AAA STA2 3
AAA STA3 1 3
AAA STA3 3
AAA 11
11


Aus der ROLLUP-ABfrage muessten noch die uebergeordneten Zeilen (ohne Eintraege in COL2 oder/und COL5) geloescht werden.
Desweiteren sollten die Eintrage in COL5 in zwei Gruppen eingeteilt werden:
Zu Gruppe eins gehoert eine Zeile wenn: COL5 = 1
Zu Gruppe zwei gehoert eine Zeile wenn: COL5 <>1
(Analog dazu waere zB: ein "normaler/guter" Programm-Exit ergibt eine 1, ein fehlerhafter Programm-Exit ergibt den Fehler-Code (eine Zahl ungleich eins);
Ich moechte im Prinzip nur wissen, wieviel "normale" Programm-Exits bezueglich COL1 und COL2 aufgetreten sind, und wieviel fehlerhafte..)

Der naechste Schritt waere eine Spalte mit der prozentualen Angabe zu den jeweiligen Programm-Exits, also sieht das Endergebnis so aus:

COL1 COL2 TO_COL5 TOTAL in_Prozent
AAA STA1 gut 3 60%
AAA STA1 schlecht 2 40%
AAA STA2 gut 2 66.66%
AAA STA2 schlecht 1 33.33%
AAA STA3 gut 3 100%

Gruss
 
Hallo,

das gewünschte Ergebnis kriegst du so:

SQL> select col1, col2, decode(col5,1,'1','<>1'), count(*)
2 from col_table
3 group by col1, col2, decode(col5,1,'1','<>1');

COL1 COL2 DEC COUNT(*)
---------- ---------- --- ---------
AAA STA1 1 3
AAA STA1 <>1 2
AAA STA2 1 2
AAA STA2 <>1 1
AAA STA3 1 3

ein Ergebnis mit prozentualer Angabe ist innerhalb eines Selects nicht möglich. Dafür würde ich einfach eine Function erstellen.
 
Zurück