2010-02-20 70 views
3

我是一個討厭SQL的謙虛程序員...... :)請幫助我解決這個問題。從不同的表中求和字段的SQL查詢

我有4個表,例如:

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 

我需要做一個SELECT表示的Id,總和的表B,C和d金額字段這樣

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

我已經嘗試了三個表的內部連接的Id和做的金額字段的總和,但結果並不是rigth。這裏是錯誤的查詢:

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 

在此先感謝,它只是我討厭SQL(或SQL恨我)。

編輯:我有一個錯字。此查詢沒有給出正確的結果。擴展示例。

回答

15

或者你可以使用子查詢的優勢:

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

我真的很喜歡你的方法。清潔,簡單......它的工作原理!謝謝..但我仍然在討論SQL:P – 2010-02-20 10:51:10

2

從您的描述中可以看出,此查詢會給出錯誤信息,因爲您正在使用組中的不存在的列dbo.A.Amount。將其更改爲dbo.A.Total可能是您需要的。

如果你需要的所有金額在一起,那就試試這個查詢:

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

這只是一個錯字,反正查詢不起作用。 – 2010-02-20 09:17:49

0

這可能幫助其他用戶。

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

這一個也是行之有效

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

試試這個代碼 選擇Total = ISNULL((SELECT SUM(ISNULL(金額,0))從表一),0)+ ISNULL (從表b)中選擇Sum(isnull(Amount,0)),0)+ isnull((從表c)中選擇Sum(isnull(Amount,0)),0)

相關問題