首页 > 解决方案 > 列中的分组和空值

问题描述

需要一些帮助来解决问题。

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

在此处输入图像描述

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'

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

在此处输入图像描述

标签: sqlsql-server

解决方案


您可以将逻辑替换为:

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

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

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

having count(distinct dob) <= 1

推荐阅读