MS SQL条件连接

时间:2012-12-18 16:00:13

标签: sql sql-server-2008

我有一个SQL查询:

  SELECT * FROM Customer c
  LEFT JOIN  Invoice I ON  I.InvcNum = C.Cust_InvcNum

某些事情发生了变化,并且连接不起作用,因为'Cust_InvcNum'中的数据没有一致性。所以现在当它找不到连接的记录或者它是null时,它需要检查另一个条件。

 LEFT JOIN Invoice I ON I.InvcNum = (SELECT p.InvcPrefix FROM Prefix WHERE p.DealerID = I.DealrID )  + '-' + I.InvcNum

第二次加入我确实有效,但它花了太长时间才能得到我的数据。还有其他办法吗?

之前曾经是

加入I.InvcNum = C.Cust_InvcNum
  两列都具有相同的数据,如DlrCd-InvcNum,即列1234-A789   但它不能匹配上述数据或现在发票表中的“InvcNum”列   可以像Dlrd-InvcNum或InvcPrefix-InvcNum

一样填充

所以InvcNum = 1234-A789但CustNum = I94-A789 所以我们需要检查是否为InvoicePrefix-InvcNum

1 个答案:

答案 0 :(得分:0)

SELECT *
FROM Customer c 
  LEFT JOIN (
             SELECT i.InvcNum, p.InvcPrefix + '-' + I.InvcNum AS pInvcNum 
             FROM Invoice i LEFT JOIN Prefix p ON i.DealrID = p.DealrID
             ) ip ON c.Cust_InvcNum = CASE WHEN c.Cust_InvcNum = ip.InvcNum 
                                           THEN ip.InvcNum 
                                           ELSE ip.pInvcNum END