Autor Beitrag
WEBSTER
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 94



BeitragVerfasst: Di 10.01.06 01:20 
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.


ausblenden SQL-Anweisung
1:
2:
3:
4:
5:
6:
7:
8:
9:
select  v.anrede,v.vorname,v.name,
if (g.bei_absage is nullthen 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:

ausblenden 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:

ausblenden 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

_________________
Wer etwas anders macht, aber nicht besser, der sollte besser etwas anderes machen.
alex517
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 60


D7Ent, FB, FIBPlus
BeitragVerfasst: Di 10.01.06 09:31 
Hallo Webster,

Verwende statt IF die CASE Anweisung.
Das würde deiner IF-Anweisung entsprechen:
ausblenden 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:
ausblenden SQL-Anweisung
1:
2:
3:
..,
COALESCE(g.bei_absage, 0as absagen,
...

Als Ergebnis wird der erste Wert der nicht NULL ist zurückgegeben.

alex