-1

我有两张这样的表:

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

4

1 回答 1

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”的值。)

于 2013-08-22T12:58:06.147 回答