如何修改SQL Server查询,统计所有ItemType的关联Item数量(含0值)
统计所有ItemType对应的Item数量(包含无Item的类型)
嘿,这个问题我之前也碰到过!你当前用的inner join只会保留两张表中能匹配上的行,所以那些没有对应Item的ItemType就被过滤掉了。要展示所有已定义的ItemType,哪怕该类型下没有Item,只需要做两个小调整:
修改后的查询语句
select ItemType.ItemTypeName as [Item Type], count(Item.Id) as [Items Count] from ItemType left join Item on Item.TypeId = ItemType.Id group by ItemType.ItemTypeName
为什么这样改?
- 左连接(Left Join)的作用:
left join会保留左表(这里是ItemType)的所有记录,不管右表(Item)有没有匹配的数据。对于没有对应Item的类型,Item表的字段会显示为NULL。 - count()的正确用法:如果用
count(*),它会把所有行(包括Item字段为NULL的行)都算进去,这样没有Item的类型会显示1而不是0。而count(Item.Id)只会统计Item.Id不为NULL的行数——也就是真正存在的Item数量,这样就能得到你想要的0啦。
可选优化:给结果排序
如果希望结果按类型名称排序,只需要在查询末尾加个order by:
select ItemType.ItemTypeName as [Item Type], count(Item.Id) as [Items Count] from ItemType left join Item on Item.TypeId = ItemType.Id group by ItemType.ItemTypeName order by ItemType.ItemTypeName
内容的提问来源于stack exchange,提问作者pitersmx
相关产品推荐
相关产品推荐

