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