Sql null的组计数始终为0(零)

Sql null的组计数始终为0(零),sql,tsql,Sql,Tsql,在TSql中,建议使用什么方法对包含空值的数据进行分组 查询类型的示例: Select Group, Count([Group]) From [Data] Group by [Group] 似乎计数(*)和计数(组)都会导致空组显示0 预期表数据的示例: Id, Group --------- 1 , Alpha 2 , Null 3 , Beta 4 , Null 预期结果的示例: Group, Count --------- Alpha, 1 Beta, 1 Null, 0 这

在TSql中,建议使用什么方法对包含空值的数据进行分组

查询类型的示例:

Select Group, Count([Group]) 
From [Data] 
Group by [Group]
似乎计数(*)和计数(组)都会导致空组显示
0

预期表数据的示例:

Id, Group
---------
1 , Alpha
2 , Null
3 , Beta
4 , Null
预期结果的示例:

Group, Count
---------
Alpha, 1
Beta,  1
Null,  0
这是可通过计数(Id)获得的期望结果这是获得此结果的最佳方法吗?为什么count(*)和count(Group)返回“不正确”的结果?

Group, Count
---------
Alpha, 1
Beta,  1
Null,  2
编辑:我不记得为什么我认为count(*)会这样做,这可能是我正在寻找的答案。

count(*)
应该有效:

SELECT Grp,COUNT(*)
FROM tab
GROUP BY Grp
另一个解决方案可以是:

SELECT Grp, COUNT(COALESCE(Grp, ' '))
FROM tab
GROUP BY Grp
下面是代码,请尝试一下

Select Group, Count(isNull(Group,0)) 
From [Data] 
Group by [Group]
照办

SELECT [group], count([group])
GROUP BY [group]


Count(id)没有给出问题中提到的预期结果。为组NULL指定值2

最佳方法是使用count(*),其行为与count(1)或任何其他常量完全相同

*将确保对每一行进行计数

Select Group, Count(*) 
From [Data] 
Group by [Group]

在这种情况下,之所以
null
显示
0
而不是2,是因为每个单元格都计为1或null,并且
null+null=null
因此该组的总数也将为null。但是,列类型是一个整数,因此它显示为
0

这行吗<代码>选择组,计数(IsNull([Group],1))@Nilesh如果我想做,我可以做计数(1)是的,你也可以做计数(1):)我想你知道这里需要的所有东西,那么你为什么要问这个问题?@Hamidreza你知道如何写一个问题,你在写的时候就知道了。