【发布时间】:2017-11-07 11:25:47
【问题描述】:
我目前正在处理一个未按照我认为应该的方式设置的数据库。几乎没有任何主键/外键,因此连接表可能非常棘手。
我试图重新创建一个与我创建的连接导致不正确重复行的问题类似的问题,这是缺少键的结果。
sql 小提琴 - 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。因此,如果我将这些结果分组并将它们相加,那么总金额是错误的。它与我的现实生活示例略有不同,因为由于重复的行,即使使用正常的连接语法,我实际上也得到了交叉连接。
删除这些重复行的最佳方法是什么?我已尝试加入多个列以创建唯一行,但我没有其他列可加入。
谁能给我建议?
【问题讨论】:
-
如果按组求和,总金额怎么会出错??
-
不,这是完全正常的 - 如果您将单个“标题”记录连接到多个“子”记录,则“标题”记录会针对每个子记录表示。这是一个完全正常的连接操作,也是一个发票抬头连接到多个发票行的完全正常的结果。你到底想在这里做什么?
标签: sql sql-server join