Cle*_*ent 6 sql-server group-by
以下是我获得的数据类型的示例(由不同用户收集):
| 姓名 | 姓 |
|---|---|
| 萌 | 莫莫 |
| 萌 | 莫莫 |
| 杰克 | 贾贾 |
| 杰克 | 杰基 |
我想查找两个用户何时收集同名的不同姓氏。
我想要得到的输出是:
| 姓名 | 姓 |
|---|---|
| 萌 | 莫莫 |
| 杰克 | 无效的 |
如果所有用户都收集了相同的姓氏,我会看到姓氏,如果存在差异,我会看到 NULL。
我尝试在互联网上搜索,但我无法正确描述我正在搜索的内容。
我尝试使用 CASE 发出请求,但没有成功。
这可以使用 来解决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也可以。
您可以按 进行分组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)
| 归档时间: |
|
| 查看次数: |
2314 次 |
| 最近记录: |