假设sql server有这样一张表,每个名字如果重复,只取第一个名字,怎么实现它,如果用distinct 姓名 发表文章不能得想要结果。
id 姓名 发表文章
1 张三 文章A
2 李四 文章B
3 张三 文章C
4 张三 文章D
5 李四 文章E
6 赵五 文章F
变成这样
id 姓名 发表文章
1 张三 文章A
2 李四 文章B
6 赵五 文章F
假设sql server有这样一张表,每个名字如果重复,只取第一个名字,怎么实现它,如果用distinct 姓名 发表文章不能得想要结果。
id 姓名 发表文章
1 张三 文章A
2 李四 文章B
3 张三 文章C
4 张三 文章D
5 李四 文章E
6 赵五 文章F
变成这样
id 姓名 发表文章
1 张三 文章A
2 李四 文章B
6 赵五 文章F
以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
你可以使用SQL中的窗口函数来达到这个目的。具体来说,你可以使用ROW_NUMBER()
函数为每个姓名的重复项分配一个行号,然后只选择行号为1的记录。这样,对于每个重复的姓名,只有第一个出现的记录会被保留。
以下是如何在SQL Server中实现这个操作的示例:
WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY 姓名 ORDER BY id) AS rn
FROM 你的表名
)
SELECT id, 姓名, 发表文章
FROM CTE
WHERE rn = 1
ORDER BY id;
在这个查询中:
ROW_NUMBER()
函数为每个姓名的重复项分配一个行号。这里按照id
字段排序,但你可以根据需要选择其他排序方式。PARTITION BY 姓名
确保行号是在每个姓名的分组内独立分配的。记得将你的表名
替换为你的实际表名。执行这个查询后,你将得到你所期望的结果。