SQL-仅当不存在不为空的匹配记录时,才返回具有空值的记录

时间:2020-07-27 19:39:19

标签: sql null distinct

我有一个表,其中某些字段包含多个条目,而其他字段则没有。这是一个例子:

enter image description here

我需要编写一个查询,如果存在非空记录,它将返回带有数字值的“类型”值的不同列表,但是仅当没有匹配的“类型”值与返回值时,才返回空值对应的数值。因此,对于上表,我需要一个这样的记录集:

enter image description here

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

1 个答案:

答案 0 :(得分:2)

您可以使用聚合:

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;