Sql 使用左连接计数记录
我正试图计算每种状态登记的账单数量。对于那些没有匹配项的状态,显示0 当我在不使用任何Sql 使用左连接计数记录,sql,sql-server,Sql,Sql Server,我正试图计算每种状态登记的账单数量。对于那些没有匹配项的状态,显示0 当我在不使用任何WHERE子句的情况下使用LEFT JOIN时,它可以完美地工作: 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”状态缺失)
WHERE
子句的情况下使用LEFT JOIN
时,它可以完美地工作:
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”状态缺失):
如何使用
WHERE
子句显示查询中缺少的“Pendente”状态?扩展ON
子句:
SELECT bs.name as status, count(b.StatusId) as quantity
FROM BillStatus bs LEFT JOIN
Bill b
on b.StatusID = bs.Id AND
MONTH(b.RefDate) = 2 AND
YEAR(b.RefDate) = 2019
GROUP BY bs.name;
LEFT JOIN
(正在使用筛选的表)WHERE
子句将转到内部JOIN
注:
[]
李>
扩展
ON
子句:
SELECT bs.name as status, count(b.StatusId) as quantity
FROM BillStatus bs LEFT JOIN
Bill b
on b.StatusID = bs.Id AND
MONTH(b.RefDate) = 2 AND
YEAR(b.RefDate) = 2019
GROUP BY bs.name;
LEFT JOIN
(正在使用筛选的表)WHERE
子句将转到内部JOIN
注:
[]
李>
将子句放入
中,其中会隐式地将其转换为内部联接。此外,避免在
/中的列中使用函数,因为这会影响性能。使用正确的日期逻辑:
选择bs.[name]作为状态,
将(b.StatusId)计数为数量
来自dbo.billbs
在b.StatusID=b.Id上左连接dbo.Bill b
和b.RefDate>=“20160301”
b.参考日期<'20160401';
按bs[名称]分组;
此外,通常最好避免别名的文字刺痛;它会使事情变得难以理解。可以使用括号([]
)作为T-SQL定界标识符字符,也可以使用双引号(“
)作为ANSI字符。将子句放入WHERE
中会隐式将其转换为内部联接
。此外,尽可能避免在/WHERE
中的列上使用函数(将)影响性能。使用正确的日期逻辑:
选择bs.[name]作为状态,
将(b.StatusId)计数为数量
来自dbo.billbs
在b.StatusID=b.Id上左连接dbo.Bill b
和b.RefDate>=“20160301”
b.参考日期<'20160401';
按bs[名称]分组;
此外,通常最好避免别名的文字戳;这会使事情变得难以理解。可以使用括号([]
),即T-SQL定界标识符字符,也可以使用双引号(“
)哪些是ANSI标准。理解。像符咒一样工作。非常感谢。理解。像符咒一样工作。非常感谢。理解。像符咒一样工作。非常感谢。理解。像符咒一样工作。非常感谢。