我有两张这样的表:
**Invoices:**
InvoiceId Type Number EmployeeId
1 A 100 -1
2 B 200 11
3 A 300 -1
4 B 400 13
**Deliveries:**
DeliveryId InvoiceId EmployeeId
1 1 10
2 2 500
3 2 501
4 3 12
5 4 502
6 4 503
发票已连接到1个或多个交货。 员工是签署交货或发票的人。
我的数据中的逻辑是: 如果只有一个交货加入发票我们从交货处读取员工,这是类型A.如果有更多交货我们从发票中读取员工,这是类型B
我想得到:
InvoiceId Number TrueEmployee
1 100 10
2 200 11
3 300 12
4 400 13
或最终
InvoiceId Number InvoiceEmployee DeliveryEmployee
1 100 whatever 10
2 200 11 whatever
3 300 whatever 12
4 400 13 whatever
我试过
Select InvoiceId,Number,Invoices.EmployeeId,Deliveries.EmployeeId
from Invoices inner join Deliveries
on Invoices.InvoiceId=Deliveries.InvoiceId
但如果连接的交付次数超过1次,它将为每张发票返回多行
有什么想法吗? 如果重要的话,我正在使用Ms SQL。
答案 0 :(得分:2)
这是一个没有分组的版本,但选择性更强LEFT JOIN
:
SELECT i.InvoiceId,
i.Number,
CASE i.Type WHEN 'A' THEN 999 ELSE i.EmployeeId END iEmployeeId,
COALESCE(d.EmployeeId,999) dEmployeeId
FROM invoices i
LEFT JOIN deliveries d ON i.Type='A'
AND d.InvoiceId = i.InvoiceId
http://sqlfiddle.com/#!3/0b8738/4
随便挑选,最适合你的。
(在我的示例中,我使用999
作为'whatever'的值。)