当不同值时返回 NULL,否则返回值

Cle*_*ent 6 sql-server group-by

以下是我获得的数据类型的示例(由不同用户收集):

姓名
莫莫
莫莫
杰克 贾贾
杰克 杰基

我想查找两个用户何时收集同名的不同姓氏。

我想要得到的输出是:

姓名
莫莫
杰克 无效的

如果所有用户都收集了相同的姓氏,我会看到姓氏,如果存在差异,我会看到 NULL。

我尝试在互联网上搜索,但我无法正确描述我正在搜索的内容。

我尝试使用 CASE 发出请求,但没有成功。

And*_*y M 6

这可以使用 来解决COUNT(DISTINCT ...)。按 分组结果name。计算每个名字中不同的姓氏。如果计数不同于 1,则将姓氏显示为空,否则显示实际姓氏,例如使用MAX,如下所示:

SELECT
  name
, surname = CASE COUNT(DISTINCT surname) WHEN 1 THEN MAX(surname) END
FROM
  dbo.People
GROUP BY
  name
;
Run Code Online (Sandbox Code Playgroud)

您必须应用聚合函数,surname因为分组仅按name。由于您仅在非重复计数为 1 时才显示它,因此您选择哪个实例并不重要,因为它们都是相同的。 MIN也可以。


Cha*_*ace 5

您可以按 进行分组first_name,然后将MIN与 进行比较MAX,看看它们是否相同。

SELECT
  n.first_name,
  CASE WHEN MIN(n.last_name) = MAX(n.last_name) THEN MIN(n.last_name) END AS last_name
FROM #names n
GROUP BY
  n.first_name;
Run Code Online (Sandbox Code Playgroud)

数据库<>小提琴