Daten für SUM abfragen

Hallo

ich habe zwei Tabellen:

account | details

ID | ID
userid | accountid
| deptvalue

Ich möchte gerne alle Datensätze aus Tabelle account mit dem Gesamtergebnis von details.deptvalue. Ich weiß, sollte kein Wert für SUM bereitstehen, ergibt SUM einfach einen NULL-Wert.

In account stehen zwei Datensätze. In details keine.

Wie kriege ich nun es hin, dass mir alle Datensätze mit der übergeben userid, samt sum(details.deptvalue) zurückerhalte, auch wenn in details gar keine Datensätze für account enthalten sind? Ich habe schon alle Variationen mit Joins und verschachtelten Select’s probiert, aber nie das Ergebnis erhalten (meist immer nur einen Datensatz???)

Gruß Olli

Moin,

immer hilfreich ist es anzugeben um was für eine Art Datenbank es sich handelt.

In account stehen zwei Datensätze. In details keine.


Wie kriege ich nun es hin, dass mir alle Datensätze mit der
übergeben userid, samt sum(details.deptvalue) zurückerhalte,
auch wenn in details gar keine Datensätze für account
enthalten sind?

Lass´ mal kurz nachdenken, Du hast in Account N Datensätze und in Details hast Du keine. Du willst nun die Summe über eine Tabelle bilden die keine Daten enthält. Damit wäre klar das das Ergebnis NULL (oder wenn mans richtig macht 0 ist).

Mir entgeht zwar der Sinn einer solchen Abfrage aber ich mach mal folgendes:

CREATE TABLE useraccount (
 uac\_id NUMBER(12,0) 
,uac\_user\_id NUMBER(12,0)); 

CREATE TABLE userdetails (
 uds\_id NUMBER(12,0) 
,uds\_uac\_id NUMBER(12,0)
,uds\_wert NUMBER(9,2)
); 

INSERT INTO useraccount VALUES
(1,1);
INSERT INTO useraccount VALUES
(2,1);
INSERT INTO useraccount VALUES
(3,2);
INSERT INTO useraccount VALUES
(4,3);
INSERT INTO useraccount VALUES
(5,4);
INSERT INTO useraccount VALUES
(6,1);

(Umbenennung der Tabellen musste ich wegen unserer Datenbank vornehmen)

So, nun die Abfrage, wenn die Tabelle Details

SELECT \*
FROM userdetails uds
 ,useraccount uac 
WHERE uac.uac\_id = uds.uds\_uac\_id (+)

Nun mit dem SUM

SELECT uac.uac\_id, uac.uac\_user\_id, SUM(uds.uds\_wert)
FROM userdetails uds
 ,useraccount uac 
WHERE uac.uac\_id = uds.uds\_uac\_id (+)
GROUP BY uac.uac\_id, uac.uac\_user\_id

Um das SUM kann man auch noch ein NVL machen, das sieht dann schöner aus.

SELECT uac.uac\_id, uac.uac\_user\_id, NVL(SUM(uds.uds\_wert),0)
FROM userdetails uds
 ,useraccount uac 
WHERE uac.uac\_id = uds.uds\_uac\_id (+)
GROUP BY uac.uac\_id, uac.uac\_user\_id

Gruß
Andreas

Hi!

Mir entgeht zwar der Sinn einer solchen Abfrage aber ich mach
mal folgendes:

Naja, ich behaupte mal, er wollte aussagen „es könnte sein, das in der Detail-Tabelle bzw. für einzelne Master keine Details vorhanden sind“ und nun machte das Ganze wieder Sinn … man sollte bei der Software-Entwicklung halt alle möglichen Fälle berücksichtigen - auch wenn sie noch so an den Haaren herbeigezogen sind … die Anwender schaffen alles …

Grüße,
Tomh

Oh ich sehe gerade meine letzte Antwort erschien gar nicht…???

Im folgenden gebe ich Tomh recht. Es kann passieren, dass zwar in der Tabelle account ein Konto eingerichtet ist, aber in der Tabelle details noch keine Datensätze für einen Datensatz der Tabelle account vorhanden sind.

Ergo muss das Ergebnjis dann NULL bei SUM() sein.

Desweiteren ich programmiere Datenbank unabhänging und will nur SQL-Standard-Befehle benutzen ohne datenbankspezifische Befehle. Das ist nämlich das Problem :smile:

Gruß Olli

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo unikum,

ich hab’s heute etwas mit kurzen Posts. Deswegen nur so viel:

Desweiteren ich programmiere Datenbank unabhänging und will
nur SQL-Standard-Befehle benutzen ohne datenbankspezifische
Befehle. Das ist nämlich das Problem :smile:

Vergiss es! Wirklich! Keine Chance!

Gruß
Martin