首页 > 解决方案 > SQL - 仅当没有非空的匹配记录时才返回空值记录

问题描述

我有一个表,其中包含某些字段的多个条目,但没有其他字段。这是一个插图:

在此处输入图像描述

如果存在非空记录,我需要编写一个查询,该查询将返回带有数值的“类型”值的不同列表,但只有在没有与相应数值匹配的“类型”值时才返回空值. 所以,对于上表,我需要一个这样的记录集:

在此处输入图像描述

我认为这很容易,但我一直在摸索。任何帮助表示赞赏。

标签: sqlnulldistinct

解决方案


您可以使用聚合:

select type, max(col2)
from t
group by type;

这保证了第一列中的每个值只返回一行,并且只有NULL当所有值都是NULL.

如果您想要所有非空值并且NULL不存在其他具有代表性的值,则可以使用如下逻辑:

select type, col2
from t
where col2 is not null
union al
select type, null
from t
group by type
having max(col2) is null;

推荐阅读