2014-11-08 138 views
1

我有3個表格,即客戶,信用和付款。我希望在@StartDate和@EndDate之間獲得客戶所做的所有付款和積分。這是我的查詢:左加入多個條件

SELECT   Client.Name, Payment.PaymentAmount, Credit.CreditAmount 
FROM   Client 

LEFT JOIN Payment 
ON Client.ClientID = Payment.ClientID 
LEFT JOIN Credit 
ON Client.ClientID = Credit.ClientID 

WHERE  (Payment.Date BETWEEN @StartDate AND @EndDate) AND (Client.Date BETWEEN @StartDate AND @EndDate) 
ORDER BY Client.CName 

我想說明,即使款項已經不反對它的信用和NULL作出付款的全部學分,反之亦然。但我無法得到它,因爲它只顯示當天有信用和付款的客戶。

我試過OR而不是AND(與'WHERE')但它不起作用。

回答

2

你可以得到你想要的東西通過移動條件的on條款:

SELECT c.Name, p.PaymentAmount, cr.CreditAmount 
FROM Client c LEFT JOIN 
    Payment p 
    ON c.ClientID = p.ClientID AND p.Date BETWEEN @StartDate AND @EndDate LEFT JOIN 
    Credit cr 
    ON c.ClientID = cr.ClientID AND cr.Date BETWEEN @StartDate AND @EndDate 
ORDER BY c.CName; 

但是,我不知道這是你真的什麼,因爲它是做一個笛卡爾積支付和信用之間,在這段時間內多於一個。

這可能就是更接近你真正想要的東西:

SELECT c.Name, p.PaymentAmount, NULL as CreditAmount 
FROM Client c LEFT JOIN 
    Payment p 
    ON c.client_id = p.ClientId AND p.Date BETWEEN @StartDate AND @EndDate 
UNION ALL 
SELECT c.Name, NULL, c.CreditAmount 
FROM Client c LEFT JOIN 
    Credit cr 
    ON c.ClientID = cr.ClientID AND cr.Date BETWEEN @StartDate AND @EndDate 
ORDER BY Name; 
+0

感謝的人,這爲我工作。 – 2014-11-08 17:59:57