[DB2, SQL/400] Frage zu Gruppierung und Count

Ich habe folgende Tabelle:

V B P S
22 4711 1 'K'
22 4711 2 ' '
22 4712 4 ' '

Mit diesem Statement:

Select V, B, Count(\*)
From Tabelle
Group by V, B

bekomme ich die Anzahl der Datensätze.

Mit diesem Statement:

Select V, B, Count(\*)
From Tabelle
Where S = ' '
Group by V, B

bekomme ich die Anzahl der Datensätze mit S = ’ '.

Meine Frage: Wie muß das Statement aussehen, damit ich V, B, Anzahl der Datensätze und Anzahl der Datensätze S = ’ ’ bekomme?

V B S S=' '
22 4711 2 1
22 4712 1 1

Unter Oracle gibt es die Funktion Decode, die dir Inhalte nach beinah beliebigem Muster konvertieren läßt. Ich hätte sie verwendet, um aus der Zeichenkette ’ ’ einen numerischen Wert 1 zu machen und aus allen anderen eine 0. Darüber kannst du dann schön summieren:

Select V, B, S, DECODE(S, ' ', 1, 0) Summenfeld
From Tabelle

zeigt dir den neuen Spaltenwert „Summenfeld“,

Select V, B, SUM(DECODE(S, ' ', 1, 0)) S\_Leer, Count(\*)
From Tabelle
Group by V, B

zeigt die Summe so, wie sie dir vorschwebt.

DB2 kennt nun kein Decode, aber nach ausführlichen Recherchen (http://www.google.com/search?hs=Uio&hl=de&c2coff=1&c… ) habe ich festgestellt, daß es trotzdem eine Möglichkeit gibt: SELECT CASE (http://expertanswercenter.techtarget.com/eac/knowled… ).

Dein SQL müßte dann in etwa so aussehen:

Select V, B, SUM(SELECT CASE S
 WHEN ' ' THEN 1
 ELSE 0
 END CASE) AS S\_LEER, 
 Count(\*)
From Tabelle
Group by V, B

Achtung, ich kenne DB2 nicht - zwei mögliche Pferdefüße:

  1. SELECT CASE liefert nur Stringausdrücke - in dem Fall müßte der Ausdruck mittels VAL in eine Zahl konvertiert werden.
  2. Keine Ahnung, ob sich SELECT CASE syntaktisch in ein SQL-Statement so einbauen läßt. Probier es aus!

Gruß

Sancho