Fio*_*ite 1 sql group-by sql-server-2005 count
我正在使用MS SQL 2008,我有一个状态表(id,name)和一个项目表(id,name,statusid,deleted).
我想计算每个状态的项目数,并具有以下查询:
SELECT status.id,
ISNULL(COUNT (items.name), 0) AS 'count'
FROM status
LEFT OUTER JOIN items
ON items.statusid = status.id
GROUP BY status.id
Run Code Online (Sandbox Code Playgroud)
复杂的是我希望获得所有状态,如果没有状态项,则为0.
上面的工作正常,但是当我加入时WHERE items.deleted = 0,它不再显示其中带有0的行.
为什么该WHERE子句会杀死我的查询?我怀疑我的方法可能有误......
谢谢 :)
SELECT status.id,
COUNT (items.statusid) AS 'count'
FROM status
LEFT OUTER JOIN
items
ON items.statusid = status.id
AND items.deleted = 0
GROUP BY
status.id
Run Code Online (Sandbox Code Playgroud)
为什么该
WHERE子句会杀死我的查询?我怀疑我的方法可能有误......
因为如果没有给定的项目statusid,则LEFT JOIN返回一行,并将所有项目字段设置为NULL.
你的WHERE子句将这些行过滤掉(NULL = 0返回NULL)并且它们不会进入GROUP BY.
还要注意ISNULLon COUNT是无用的:COUNT永远不会返回NULL值.它只是不计算NULLs,因此将一个作为JOIN子句一部分的列放入COUNTwil就可以了.