根据发票类型从不同的表中获取员工

时间:2013-08-22 12:41:43

标签: sql sql-server

我有两张这样的表:

**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。

1 个答案:

答案 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'的值。)