我有一个像这样的数据集:
ID NAME
1 Aaron
2 Theon
3 Jon Snow
4 Jon Snow
4 Dany
5 Arya
5 Robert
5 Tyrion
我需要为此添加一个新列,以根据每个ID的不同名称的数量显示输出。因此预期的输出将是:
ID NAME Mapping
1 Aaron 1
2 Theon 1
3 Jon Snow 1
4 Jon Snow 2
4 Dany 2
5 Arya 3
5 Robert 3
5 Tyrion 3
我对如何实现此目标感到困惑,因为我尝试了一个case语句,其中count(distinct(name))没有返回正确的值。
答案 0 :(得分:4)
您可以尝试使用COUNT
作为分析功能:
SELECT
ID,
Name,
COUNT(*) OVER (PARTITION BY ID) Mapping
FROM yourTable
ORDER BY
ID;
答案 1 :(得分:1)
Another approach to get COUNT
of DISTINCT
Name
for each ID
SELECT *,
(SELECT Count(DISTINCT NAME)
FROM @table T
WHERE T1.id = T.id) Mapping
FROM @table T1
答案 2 :(得分:0)
您可以简单地使用以下查询
SELECT COUNT(DISTINCT NAME)
FROM YOUR_TABLE
GROUP BY ID
谢谢
答案 3 :(得分:0)
其他方法(指定SQL Server,否则使用INNER JOIN LATERAL):
SELECT *
FROM @table f1
CROSS APPLY
(
select Count(*) Nb from @table f2
where f2.ID=f1.ID
) f3