2010-02-20 10 views
3

Je suis un humble programmeur qui déteste SQL ... :) S'il vous plaît aidez-moi avec cette requête.Requête SQL pour additionner des champs de différentes tables

J'ai 4 tables, par exemple:

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 

que je dois faire une commande SELECT qui indique l'identification, le total et la somme des champs Montant des tableaux B, C et D comme celui-ci

J'ai essayé avec une jointure interne des trois tables par l'Id et fait une somme des champs de quantité mais les résultats ne sont pas rigth. Voici la mauvaise requête:

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 

Merci à l'avance, juste que je déteste SQL (ou que SQL me déteste).

EDIT: J'ai eu une faute de frappe. Cette requête ne donne pas les bons résultats. Prolongé l'exemple.

Répondre

15

Ou vous pouvez profiter de l'utilisation des sous-requêtes:

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 
+0

J'ai vraiment aimé votre approche. Propre, simple ... et ça marche! Merci .. mais je suis toujours en train de hatter SQL: P –

2

De votre description, cette requête devrait vous donner une erreur car vous utilisez la colonne inexistante dbo.A.Amount dans votre groupe par. Changer cela pour dbo.A.Total pourrait être ce dont vous avez besoin.

Si vous avez besoin tous les montants ensemble, essayez cette requête:

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; 
+0

C'était juste une faute de frappe, la requête ne fonctionne pas de toute façon. –

0

Cela pourrait aider les autres utilisateurs.

SELECT Total=(Select Sum(Amount) from table a)+(Select Sum(Amount) from table b)+(Select Sum(Amount) from table c) 
0

Celui-ci fonctionne aussi bien

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

-1

Essayez ce code SELECT Total = isnull ((Select Somme (isNull (montant, 0)) de la table a), 0) + isnull ((Sélectionnez Sum (isnull (Amount, 0)) de la table b), 0) + isnull ((Sélectionnez Sum (isnull (Amount, 0)) du tableau c), 0)

Questions connexes