SQL Server 2005 输出错误

4
我是一个有用的助手,可以翻译文本。

我有三个表格:stock(库存)、inward(进货)和issue(发行)

Stock表格的列和数据:

part_no | part_name | totalqty
10100        ciol      30
112233       abc       20
123456       coper      50

内倾式桌子:
part_no | qty
123456   10
123456   20
10100    20
112233   15
10100    25

问题表格:
part_no | qty
112233   20
112233   15
123456   10
112233   25
10100    40
10100    20

我的期望输出:
part_no | part_name  |inwardQty |issueQty
10100      coil         45     60
112233     abc          15     60
123456     coper        30     10

以下是我编写的查询,但没有得到我想要的输出。
select s.part_no,s.part_name,sum(i.qty) as inwardQty,sum(p.qty)as issueQty 
from stock s 
left join inward i on s.part_no = i.part_no
left join issue p on s.part_no = p.part_no 
group by 
    s.part_no,s.part_name

通过这个查询获得以下输出:
part_no | part_name  |inwardQty |issueQty
10100      coil         90     120
112233     abc          45     60
123456     coper        30     20

欢迎来到 StackOverflow: 如果您发布代码、XML 或数据样例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码样例”按钮 ({}) 以使其格式化和语法高亮! - marc_s
@marc_s - 我认为它是在句子“我的期望输出:”下面的代码片段。 - Damien_The_Unbeliever
@Damien_The_Unbeliever:是啊,是啊——早上太早了,我的身体里还没有足够的咖啡因 :-) :-) - marc_s
2个回答

4
问题在于您正在将每个“inward”的行与每个“issue”的行进行匹配,而它们处理的是相同的零件。我认为在这里使用子查询最好:
select s.part_no,s.part_name,i.qty as inwardQty,p.qty as issueQty 
from stock s 
left join
    (select part_no,sum(qty) as qty from inward group by part_no) i on s.part_no = i.part_no
left join
    (select part_no,sum(qty) as qty from issue group by part_no) p on s.part_no = p.part_no 

因此,现在每个连接中只有一行(或零行)可连接,并且您不会得到笛卡尔积。


谢谢您先生,现在它完美地运行了。我想问一下,在这个查询中,如果我希望数据只显示特定月份(例如month(i.date)=6),那么我应该在上述查询的哪里写入月份条件呢?如果我在inward表中添加数据列,应该在哪里写入条件?谢谢 - user1482953

1

请尝试此查询:

SELECT 
    s.part_no, s.part_name,
    InwardQty = (SELECT SUM(qty) FROM @inward i WHERE i.part_no = s.part_no),
    IssueQty = (SELECT SUM(qty) FROM @issue p WHERE p.part_no = s.part_no)
FROM 
    dbo.stock s 
GROUP BY
    s.part_no, s.part_name

能够精确地输出您所需的结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接