左联接具有多个条件

祖卡纳·埃贾兹(Zulqarnain Ejaz)

我有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'),但效果不佳。

戈登·利诺夫(Gordon Linoff)

您可以通过将条件移至该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;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章