Versucht, verwenden Sie INNER JOIN und GROUP BY SQL mit der SUM-Funktion Funktioniert Nicht
Bin ich nicht immer meinen Kopf um dies und fragte mich, ob jemand möglicherweise in der Lage, mir zu helfen, mit diesem.
Ich habe 2 Tabellen genannt RES_DATA
und INV_DATA
RES_DATA
Enthält meine Kunden, wie unten
CUSTOMER ID | NAME
1, Robert
2, John
3, Peter
INV_DATA
Enthält Ihre RECHNUNGEN wie Unten
INVOICE ID | CUSTOMER ID | AMOUNT
100, 1, £49.95
200, 1, £105.95
300, 2, £400.00
400, 3, £150.00
500, 1, £25.00
Ich Versuche zu schreiben SELECT
AUSSAGE, Die mir die Ergebnisse wie Unten.
CUSTOMER ID | NAME | TOTAL AMOUNT
1, Robert, £180.90
2, John, £400.00
3, Peter, £150.00
Ich glaube, dass ich 2 INNER JOINS Irgendwie die Tabellen Hinzufügen und die SUMME der Werte der Tabelle " RECHNUNGEN GRUPPIERT nach Kunden-Tabelle, aber denke ehrlich gesagt, dass mir etwas fehlt. Kann nicht einmal nahe kommen, um die Ergebnisse, die ich brauche.
- welche Art von SQL? SQL-Server?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte diese Arbeit.
Getestet habe ich es mit SQL Fiddle gegen SQL Server 2008: http://sqlfiddle.com/#!3/1cad5/1
Im Grunde das, was hier passiert ist, dass, weil der join, Sie werden immer die gleiche Zeile, auf der "linken" (d.h. von der
RES_DATA
Tabelle) für jede Zeile die auf der "richtigen" (d.h. dieINV_DATA
Tabelle), die die gleichen[CUSTOMER ID]
Wert. Wenn Sie die Gruppe, indem nur die Spalten auf der linken Seite, und führen Sie dann eine Summe, die nur die[AMOUNT]
Spalte von der rechten Seite, hält sich die eine Zeile unverändert von der linken Seite, und resümiert die übereinstimmenden Werte von der rechten Seite.Zwei Möglichkeiten, es zu tun...
GRUPPE VON
ÜBER
Verwenden Unterabfrage
SELECT * FROM RES_DATA inner join (SELECT [CUSTOMER ID], sum([TOTAL AMOUNT]) FROM INV_DATA group by [CUSTOMER ID]) T on RES_DATA.[CUSTOMER ID] = t.[CUSTOMER ID]
O(n^2)
Leistung, als op. zu einer Gruppe, die von oder über dieO(n)