Ich habe einige Probleme mit der Summierung einiger Spalte in meiner Abfrage mit Aggregation. Es ist ein bisschen schwierig zu beschreiben, was passiert, aber ich werde mein Bestes versuchen:
Ich habe 3 Tabellen - Details, zusätzliche Details und Orte. Orte ist ein Tisch, der Orte in der Welt enthält. Details enthält Details zu Ereignissen, die aufgetreten sind, und zusätzliche Details enthalten weitere Daten zu den Ereignissen.
Jeder Ort hat eine ID
und eine ParentID
(wie New York hat eine ID
und es ist Eltern ID
ist die US
. So etwas wie das). Die ID
des Ereignisses (Details) erscheint mehrmals als Spalte in der Tabelle mit zusätzlichen Details. Die zusätzliche Detailtabelle enthält auch die ID
des Ortes, an dem das Ereignis aufgetreten ist.
OK nach all dem, was ich versuche zu erreichen, ist für jeden Ort die Summe der Ereignisse, die dort passiert sind. Ich weiß, es klingt sehr spezifisch, aber es ist, was der Kunde gefragt hat.
Jedenfalls, was ich versuche zu erreichen: NewYork 60, Chicago 20, Houston 10 Dann werden die USA 90 haben. Und es hat mehrere Ebenen.
So ist das, was ich versuche zu tun:
Zusammenfassung Summe in SQL (Joins)
With C(ID, NAME, COUNTT, ROOT_ID) as
(
SELECT d.ID, d.NAME,
(SELECT COUNT(LX.ID) as COUNTT
FROM EXTRA LX
RIGHT JOIN d ON LX.PLACE_ID = d.ID -- ****
GROUP BY d.ID, d.NAME),
d.ID as ROOT_ID
FROM PLACES d
UNION ALL
SELECT d.ID, d.NAME,
(SELECT COUNT(LX.ID) as COUNTT
FROM EXTRA LX
RIGHT JOIN d ON LX.PLACE_ID = d.ID
GROUP BY d.ID, d.NAME),
C.ROOT_ID
FROM PLACES dx
INNER JOIN C ON dx.PARENT_ID = C.ID
)
SELECT p.ID, p.NAME, S.SumIncludingChildren
FROM places p
INNER JOIN (
SELECT ROOT_ID, SUM(COUNTT) as SumIncludingChildren
FROM C
GROUP BY ROOT_ID
) S
ON p.ID = S.ROOT_ID
ORDER BY p.ID;
Die Details Tabelle ihre Daten nur für die Ansicht ist. Ich füge das später hinzu. Es werden nur die jeweiligen Spalten verglichen. Damit es funktioniert, brauche ich das nicht. Nur für die Website-Daten.
Es funktioniert nicht, weil es das 'd' nicht erkennt, wo das '****' ist. Wenn ich eine "neue Instanz" dieser Tabelle anlege, wird es auch nicht funktionieren. Also habe ich versucht zu replizieren, was der richtige beitreten, indem Sie 'NOT EXISTS IN'
auf eine Abfrage, die alle Orte anstelle der richtigen Join ... on erhält. Gleiches Problem.
Vielleicht bekomme ich nichts. Aber ich suche wirklich eine Lösung und eine Erklärung. Ich weiß, dass mein Code nicht perfekt ist. Vielen Dank im Voraus.
EDIT: Ich verwende OracleSQL auf Toad 10,6
Vielleicht könnten Sie ab Ihrer Tabellen hinzufügen? – sers