【发布时间】:2015-09-09 13:52:15
【问题描述】:
我需要将发票表加入许可证表。
每个许可证都有一张发票,但一张发票可以有多个行项目。因此,许可证 X 可以具有包含行项目 1 和 2 的发票 Y(行项目创建单独的行)。
如果我尝试像这样将许可证表加入发票表:
SELECT *
FROM table.Invoice I LEFT JOIN table.License L
ON I.ClientID = L.ClientID;
某些行重复信息,但针对不同的许可证。这些行是唯一的,但它们不正确。因此,例如,这些将是我的错误结果:
Invoice #: 1 LicenseID: X Line item: 1
Invoice #: 1 LicenseID: Y Line item: 1
Invoice #: 2 LicenseID: X Line item: 1
Invoice #: 2 LicenseID: Y Line item: 1
Invoice #: 2 LicenseID: X Line item: 2
Invoice #: 2 LicenseID: Y Line item: 2
真正的结果应该是这样的:
Invoice #: 1 LicenseID: X Line item: 1
Invoice #: 2 LicenseID: Y Line item: 1
Invoice #: 2 LicenseID: Y Line item: 2
有谁知道我怎样才能达到这些结果?我怎样才能加入这两个表(clientID 是他们唯一的共同点),这样我就不会得到重复的信息?
【问题讨论】:
-
请提供表结构并详细说明您的第一个结果集如何不正确,第二个结果集如何正确?您根据什么将 6 个结果压缩为 3 个结果?
-
表结构是这样的:INVOICE: InvoiceID, Invoice#, Line item, ClientID。 LICENSE 表具有以下行:LicenseID、ClientID。第一组结果不正确,因为许可证 Y 与发票 #2 匹配。许可证 X 与发票 #1 匹配。发票 #2 有两个行项目,每个行项目都有自己的行。我正在匹配 ClientID 上的表
-
我认为您的查询没有问题:sqlfiddle.com/#!9/70bb1/2。很确定问题出在您的数据上。所以对于每个不同的
lineItem,你都有相同的invoiceid, invoiceN and clientId??为什么需要 2 列InvoiceId和Invoice #? -
Alex,我确实认为数据有问题。但我正在寻找一种无需更改数据结构即可创建数据源的方法
-
您正在寻找无法正确描述的东西