我有三个表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)
请帮助。
答案 0 :(得分: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上进行求和,因为你最终得到了连接的所有排列。
所以子查询在这里可以提供帮助:
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