2012-12-18 32 views
0

我有一個SQL查詢:MS SQL條件加入

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

一些事情改變和連接不起作用,因爲沒有在數據中的「Cust_InvcNum」沒有一致性。所以現在,當它沒有找到連接的記錄或者它是空的,它需要檢查另一個條件。

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 但不是可以匹配的上述數據還是現在在發票表 可以填充像Dlrd-InvcNum或InvcPrefix-InvcNum列「InvcNum」

所以InvcNum = 1234-A789但CustNum = I94-A789 所以我們需要檢查是否進行InvoicePrefix -InvcNum

+1

您可以發佈一些您試圖加入的示例數據嗎?理解你想要做的事情可能會更容易。 – Taryn

+0

這可能可以通過在連接的ON中使用'OR Cust_InvcNum IS NULL AND othercondition'來完成,但是我們需要查看一些數據。 –

+0

你看過執行計劃,看看性能問題在哪裏嗎? – HABO

回答

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