Summe über mehrere Unterabfragen wenn IS NULL

MysterioJN

SQL-Guru
Beiträge
158
Hi zusammen,

Eine Summe über Unterabfragen ist mir klar.
Unterabfrage 1 + Unterabfrage 2 AS blabla

Problem ist, es kann auch vorkommen, das ein Ergebnis einer Unterabfrage = NULL ist, dann klappt das mit der Summe nicht mehr, bzw. das Ergebnis ist NULL.

Also hab ich einen CASE verwendet:

CASE WHEN unterabfrage1 IS NULL
THEN '0'
ELSE unterabfrage1
END

+

CASE WHEN unterabfrage2 IS NULL
THEN '0'
ELSE unterabfrage2
END

Das funktioniert ohne Fehler, liefert mir dennoch nicht die '0' an stelle von NULL und auch das Ergebnis bleib NULL


Habt ihr einen Tipp für mich?

LG
Marco


EDIT:

Wenn ich ISNULL oder COALESCE davor schreibe, bleiben die Werte dennoch bei NULL (weil es im Zweifel keinen Datensatz dazu gibt)
 
Zuletzt bearbeitet:
Werbung:
Leider kann ich nicht mehr editieren. Ich bekomm aber scheinbar schon grundsätzlich ein Problem bei SUM(sub1 + sub2):


Eine Aggregatfunktion kann auf einem Ausdruck, der ein Aggregat oder eine Unterabfrage enthält, nicht ausgeführt werden.
 
Code:
test=*# select (select 1) + (select 2);
 ?column?
----------
  3
(1 Zeile)

test=*# select (select 1) + (select null::int);
 ?column?
----------
   
(1 Zeile)

test=*# select (select 1) + coalesce((select null::int),0);
 ?column?
----------
  1
(1 Zeile)

test=*#


Das sollte, denke ich, in allen Datenbanken so sein.
 
Werbung:
Wenn du 0 in Hochkomma setzt handelt es sich um Text. Mit + kann man Zeichenfolgen verketten aber sum() kann darauf nicht angewand werden. In jedem Fall sollte sum(isnull(spalte1,0) + isnull(spalte2,0)) AS blabla funktionieren, ansonsten liegt das Problem an anderer Stelle.
 
Zurück
Oben