SQL-Abfrage zu summieren Felder aus verschiedenen Tabellen

stimmen
4

Ich bin ein bescheidener Programmierer, die SQL hasst ... :) Bitte helfen Sie mir mit dieser Abfrage.

Ich habe 4 Tabellen, zum Beispiel:

Table A:
Id Total
1  100
2  200
3  500

Table B
ExtId  Amount
1      10
1      20
1      13
2      12
2      43
3      43
3      22

Table C
ExtId  Amount
1      10
1      20
1      13
2      12
2      43
3      43
3      22

Table D
ExtId  Amount
1      10
1      20
1      13
2      12
2      43
3      43
3      22

Ich muss eine SELECT machen, die die Id zeigt, die Summe und die Summe der Betragsfelder der Tabellen B, C und D wie folgt aus

Id Total AmountB AmountC AmountD
1  100   43      43      43
2  200   55      55      55
3  500   65      65      65

Ich habe mit einem inneren versucht Verknüpfung der drei Tabellen, die von der Id und einer Summe der Betragsfelder tun aber die Ergebnisse sind nicht rigth. Hier ist die falsche Abfrage:

SELECT     dbo.A.Id, dbo.A.Total, SUM(dbo.B.Amount) AS Expr1, SUM(dbo.C.Amount) AS  Expr2, SUM(dbo.D.Amount) AS Expr3
FROM         dbo.A INNER JOIN
                  dbo.B ON dbo.A.Id = dbo.B.ExtId INNER JOIN
                  dbo.C ON dbo.A.Id = dbo.C.ExtId INNER JOIN
                  dbo.D ON dbo.A.Id = dbo.D.ExtId
GROUP BY dbo.A.Id, dbo.A.Total

Vielen Dank im Voraus, es ist nur, dass ich SQL Hass (oder dass SQL hasst mich).

EDIT: Ich hatte einen Tippfehler. Diese Abfrage wird die richtigen Ergebnisse nicht geben. das Beispiel erweitert.

Veröffentlicht am 20/02/2010 um 10:08
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
15

Oder Sie können die Vorteile der Verwendung von Unterabfragen:

select A.ID, A.Total, b.SB as AmountB, c.SC as AmountC, d.SD as AmountD
from A
  inner join (select ExtID, sum(Amount) as SB from B group by ExtID) b on A.ID = b.ExtID
  inner join (select ExtID, sum(Amount) as SC from C group by ExtID) c on c.ExtID = A.ID
  inner join (select ExtID, sum(Amount) as SD from D group by ExtID) d on d.ExtID = A.ID
Beantwortet am 20/02/2010 um 10:56
quelle vom benutzer

stimmen
2

Aus Ihrer Beschreibung sollte diese Abfrage geben Sie eine Fehlermeldung , wie Sie die nicht vorhandene Spalte verwenden dbo.A.Amountin Ihrer Gruppe durch. Dies zu ändern zu dbo.A.Totalkönnen, was Sie brauchen.

Wenn Sie die Beträge zusammen alle brauchen, dann versuchen Sie diese Abfrage:

select A.Id, A.Total, sum(B.Amount + C.Amount + D.Amount) AS Total_Amount
from A
  inner join B on A.Id = B.ExtId
  inner join C on A.Id = C.ExtId
  inner join D on A.Id = D.ExtId
group by A.Id, A.Total;
Beantwortet am 20/02/2010 um 10:13
quelle vom benutzer

stimmen
1

Dies funktioniert auch gut

SELECT (SELECT SUM(Amount) FROM TableA) AS AmountA, (SELECT SUM(Amount) FROM TableB) AS AmountB, (SELECT SUM(Amount) FROM TableC) AS AmountC, (SELECT SUM(Amount) FROM TableD) AS AmountD

Beantwortet am 20/05/2016 um 11:44
quelle vom benutzer

stimmen
0

Dies könnte anderen Benutzern helfen.

SELECT Total=(Select Sum(Amount) from table a)+(Select Sum(Amount) from table b)+(Select Sum(Amount) from table c)
Beantwortet am 07/01/2016 um 16:53
quelle vom benutzer

stimmen
-1

Versuchen Sie diesen Code SELECT Total = isnull ((Select Sum (Isnull (Betrag, 0)) aus der Tabelle a), 0) + isnull ((Select Sum (isnull (Betrag, 0)) aus der Tabelle b), 0) + isnull ( (SELECT SUM (isnull (Betrag, 0)) aus der Tabelle C), 0)

Beantwortet am 27/12/2017 um 06:52
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more