[OracleSQL] Zählung: Null-Treffer-Info

m3000

Erfahrenes Mitglied
Hallo,

mein Ziel ist es, einen gezählten Wert auch dann mit ausgeben zu lassen, wenn er Null Treffer hat. Ich zähle substrings einer Tabellenspalte:

Code:
select
   substr(col,1,3), count (*) "Anzahl"
   from table
   where
   substr(col,1,3) IN
    (
    'Aaa',
    'Bbb',
    'Ccc',
    'Ddd',
    'Eee',
    )
   group by substr(col,1,3)
 ;
Wenn es den substr 'Ccc' nicht in meiner Tabelle gibt, enthält meine Ausgabe nur vier Zeilen - 'Ccc' wird gar nicht mit ausgegeben. Ich hätte es aber gern so:

Code:
SUBS 	 Anzahl
   ----  ----------
   Aaa 		 672
   Bbb 		 5132
   Ccc 		 0
   Ddd 		 781
   Eee 		 659
Geht das?

Dank und Gruss
m3000
 
Hallo!

Hab leider gerade meine Oracle Instanz nach einem Patchversuch zerschossen:

aber in MySQL ginge das so:
Code:
mysql> select ctmp,count(col) from temp LEFT OUTER JOIN tab ON ctmp = substr(col,1,3) GROUP BY substr(col,1,3);
+------+------------+
| ctmp | count(col) |
+------+------------+
| Ccc  |          0 |
| Aaa  |          3 |
| Bbb  |          3 |
| Ddd  |          3 |
| Eee  |          3 |
+------+------------+
5 rows in set (0.00 sec)

Tabelle Tab:
Code:
mysql> select * from tab;
+--------+
| col    |
+--------+
| Aaa123 |
| Aaa456 |
| Aaa789 |
| Bbb123 |
| Bbb456 |
| Bbb789 |
| Ddd123 |
| Ddd456 |
| Ddd789 |
| Eee123 |
| Eee456 |
| Eee789 |
+--------+
12 rows in set (0.00 sec)

"Hilfstabelle" temp:
Code:
mysql> select * from temp;
+------+
| ctmp |
+------+
| Aaa  |
| Bbb  |
| Ccc  |
| Ddd  |
| Eee  |
+------+
5 rows in set (0.00 sec)

Das ganze sollte in Oracle auch funktionieren, allerdings denke ich es da unter Oracle (und vielleicht auch unter MySQL) ein paar "geschicktere" Lösungen gibt.

HTH,

Gruß Tom
 
Zurück