我正在尝试计算每种状态下我有多少张账单。对于没有匹配项的状态,请显示0。
当我使用LEFT JOIN
无任何WHERE
子句时,它可以完美地工作:
SELECT bs.name 'status', count(b.StatusId) 'quantity'
FROM BillStatus bs
LEFT JOIN Bill b on b.StatusID = bs.Id
GROUP BY bs.name
但是,当我添加WHERE子句时,它仅显示具有匹配项的状态(“ Pendente”状态丢失):
SELECT bs.name 'status', count(b.StatusId) 'quantity'
FROM BillStatus bs
LEFT JOIN Bill b on b.StatusID = bs.Id
WHERE MONTH(b.RefDate) = 2
AND YEAR(b.RefDate) = 2019
GROUP BY bs.name
如何显示带有WHERE
子句的查询中缺少的“ Pendente”状态?
将子句WHERE
隐式地放入会变成一个INNER JOIN
。另外,请避免在ON
/列上使用函数,WHERE
因为它会(会)影响性能。使用正确的日期逻辑:
SELECT bs.[name] AS Status,
COUNT(b.StatusId) AS Quantity
FROM dbo.BillStatus bs
LEFT JOIN dbo.Bill b ON b.StatusID = bs.Id
AND b.RefDate >= '20160301'
AND b.RefDate < '20160401';
GROUP BY bs.[name];
另外,通常最好避免别名使用文字字符串;它会使事情变得难以理解。可以使用括号([]
)(它们是T-SQL分隔符),也可以使用双引号("
)作为ANSI。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句