列中的分组和空值

时间:2019-07-25 13:05:52

标签: sql sql-server

需要一些有关解决问题的帮助。

下面是我的输入数据。在这里,我根据名称字段进行分组。下面给出了我目前用于分组的查询。

enter image description here

select name from Table
group by name having count(distinct DOB)='1'

但是问题是如果组中的所有记录的DOB字段为空,则上面的查询不会影响记录。如果我尝试为DOB字段提供一些虚拟值,那么它将无法获取前两行的结果,如果我不给出虚拟值,将不会影响3和4中的记录

我尝试了类似的方法,但这是错误的

select name from Table
group by name having count(distinct case when DOB is null then '9999-01-01' else DOB END)='1'

有人可以在这里提供一些建议吗?我的预期结果如下。

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以将逻辑替换为:

having min(dob) = max(dob) or
       min(dob) is null

根据您的数据,count(distinct)可能相对昂贵,因此实际上比使用它便宜。

可以使用count(distinct)。只需更改比较值即可:

having count(distinct dob) <= 1