admin

联接结果给出重复的行-SQL Server

sql

我当前正在处理的数据库未按我认为的方式设置。几乎没有任何主键/外键,因此联接表可能会非常棘手。

我试图重新创建与我所创建的联接类似的问题,这是由于缺少键而导致的不正确的重复行。

sqlfiddle- http://sqlfiddle.com/#!9/ff59ad/1

询问:

SELECT I.InvoiceNumber, I.AmountPaid,
O.Amount
FROM OrderInvoice O
JOIN Invoice I 
ON O.InvoiceNumber = I.InvoiceNumber

现在,您可以看到发票编号重复的条目

InvoiceNumber   AmountPaid  Amount
    123           10          8
    123           10          2
    567           10          4
    567           10          6

每次支付的总金额应仅为10,而由于匹配的行,联接将为每个创建20。因此,如果我将这些结果分组并求和,则总数是错误的。它与我的实际示例略有不同,因为由于行重复,即使使用普通的连接语法,我实际上也得到了交叉连接。

删除这些重复的行的最佳方法是什么?我尝试加入多个列以创建唯一行,但没有其他列可以加入。

谁能给我建议?


阅读 241

收藏
2021-06-07

共1个答案

admin

只需添加group by带有sum聚合功能的子句

SELECT I.InvoiceNumber, I.AmountPaid,
sum(O.Amount) Amount
FROM OrderInvoice O
JOIN Invoice I 
ON O.InvoiceNumber = I.InvoiceNumber group by I.InvoiceNumber, I.AmountPaid

结果 :

InvoiceNumber   AmountPaid  Amount
123             10          10
567             10          10
2021-06-07