我当前正在处理的数据库未按我认为的方式设置。几乎没有任何主键/外键,因此联接表可能会非常棘手。
我试图重新创建与我所创建的联接类似的问题,这是由于缺少键而导致的不正确的重复行。
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。因此,如果我将这些结果分组并求和,则总数是错误的。它与我的实际示例略有不同,因为由于行重复,即使使用普通的连接语法,我实际上也得到了交叉连接。
删除这些重复的行的最佳方法是什么?我尝试加入多个列以创建唯一行,但没有其他列可以加入。
谁能给我建议?
只需添加group by带有sum聚合功能的子句
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