WEBSTER - Di 10.01.06 01:20
Titel: SQL mit IF Abfrage
Salute,
ich möchte folgenden SQL mit einer IF Abfrage laufen lassen. Leider kommt es zu einer Fehlermeldung:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, char 1.
if.
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9:
| select v.anrede,v.vorname,v.name, if (g.bei_absage is null) then absagen = 1 else absagen = 0, Sum(G.VERMITTLUNGSBETRAG) as summen from geschaefte g INNER JOIN vermittler v ON (g.vermittler_nr_1 = v.vermittler_nr) where erfassungdat between '01.01.2005' and '31.01.2006' and substring(Vermittler_Nr_1 FROM 1 for 2) = '10' and substring(Vermittler_Nr_1 FROM 4 for 2) = '10' group by v.anrede,v.vorname,v.name,absagen |
Das Ergebniss des SQLs sollte so aussehen:
Quelltext
1: 2: 3: 4: 5: 6:
| Herr Peter Maier 0 100000 Herr Peter Maier 1 32000 Herr Paul Maier 0 16000 Herr Paul Maier 1 356000 Herr Peter Weber 0 10450000 Herr Peter Weber 1 32004350 |
Im Augenblick scheitert es an der IF Abfrage. Aber der SQL ist doch sonst ok, oder?
Eigentlich hätte ich aber auch noch eine dritte "Gruppenzeile" und zwar die Summe dersplate Summen. So etwa:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Herr Peter Maier 0 100000 Herr Peter Maier 1 32000 Herr Peter Maier 132000 Herr Paul Maier 0 16000 Herr Paul Maier 1 356000 Herr Paul Maier 373000 Herr Peter Weber 0 10450000 Herr Peter Weber 1 32004350 Herr Peter Weber 42454350 |
Aber wie...?
Bitte um Hilfe..
THX
WEBSTER
alex517 - Di 10.01.06 09:31
Hallo Webster,
Verwende statt IF die CASE Anweisung.
Das würde deiner IF-Anweisung entsprechen:
SQL-Anweisung
1: 2: 3:
| .., CASE WHEN g.bei_absage IS NULL THEN 0 ELSE 1 END as absagen ... |
Welche Werte kann eigentlich g.bei_absage haben? Wenn g.bei_absage = 0 sein kann,
würde die Anweisung zu einem fehlerhaften Ergebnis führen, da 0 <> NULL und damit absagen:=1.
Die CASE müsste also ein wenig ausgebaut werden.
Wenn man davon ausgehen kann, dass "g.bei_absage" die Werte NULL, 0 oder 1 haben kann geht es auch so:
SQL-Anweisung
1: 2: 3:
| .., COALESCE(g.bei_absage, 0) as absagen, ... |
Als Ergebnis wird der erste Wert der nicht NULL ist zurückgegeben.
alex