2013-06-29 70 views
0

我有三個表1 ItemMaster 2. GRN 3.發出多表通過加入

Item Master 
------------------ 
ItemCode   ItemDescr 
--------   --------- 
1     Test1 
2     Test2 
3     Test3 
4     Test4 
5     Test5 

GRN Table 
------------------- 
ItemCode   grnQty 
--------   -------- 
1     1 
1     2 
2     1 
1     2 
2     1 
3     1 

Issue Table 

ItemCode   issQty 
--------   ------- 
1     1 
1     2 
2     1 
4     1 

我要生成一個報告/圖像 - >

ItemCode   ItemDescr  GRN Qty  Issue Qty 
--------   ---------  -------  ---------   
1     Test1   5    3     
2     Test2   2    1     
3     Test3   1    0 
4     Test4   0    1 
5     Test5   0    0 

爲此,我已經使用下面的SQL代碼:

select a.ItemCode, a.ItemDescr, isnull(sum(b.grnQty),0) as 'GRN Qty', isnull(sum(c.issQty),0) as 'Issue Qty' from 
ItemMaster a 
left join GRN b 
on a.ItemCode=b.ItemCode 
left join Issue c 
on a.ItemCode=c.ItemCode 
group by a.ItemCode, a.ItemDescr 

但生成的報告是

ItemCode   ItemDescr  GRN Qty  Issue Qty 
--------   ---------  -------  ---------   
1     Test1   10    9     
2     Test2   2    2     
3     Test3   1    0 
4     Test4   0    1 
5     Test5   0    0 

我的代碼有什麼問題?

GRN數量10 = 5 X(項目代碼1的問題表中沒有行)和其他值相同,如問題數量9 = 3 X(項目的GRN表中沒有行的數量相同代碼2)

請幫忙。

回答

1

這裏沒有調和,你所描述的恰恰是你的問題。請看簡化了查詢結果:

select a.ItemCode, a.ItemDescr, b.grnQty as 'GRN Qty', c.issQty as 'Issue Qty' 
from ItemMaster a 
left join GRN b on a.ItemCode=b.ItemCode 
left join Issue c on a.ItemCode=c.ItemCode 

此表的樣子(只是線ItemCode = 1):

ItemCode   ItemDescr  GRN Qty  Issue Qty 
--------   ---------  -------  ---------   
1     Test1   1   1     
1     Test1   2   1     
1     Test1   2   1     
1     Test1   1   2     
1     Test1   2   2     
1     Test1   2   2     

由+你最終總結結束現在添加您的組你在哪裏。

所以你不能直接在兩個連接的選擇上進行總和,因爲你最終會得到所有連接的排列。

所以子查詢可以幫助這裏:

select 
    a.ItemCode, 
    a.ItemDescr, 
    (select sum(b.grnQty) from GRN b where a.ItemCode=b.ItemCode) as 'GRN Qty', 
    (select sum(c.issQty) from Issue c where a.ItemCode=c.ItemCode) as 'Issue Qty' 
from ItemMaster a 
+0

哦..謝謝了很多。謝,曼ü是現貨..我今天編寫了整整一天,絕對耗盡了..完全錯過了..這是非常好的解釋,我相信這是我正在尋找的解決方案..我會測試它明天,讓你知道..我的實際腳本是比這複雜的方式..我會測試從你的答案的理論,讓你知道.....謝謝... ...關心Bhaskar – Bhaskar