我有一个数据集,如:
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))没有返回正确的值。
您可以尝试使用COUNT
作为分析函数:
SELECT
ID,
Name,
COUNT(*) OVER (PARTITION BY ID) Mapping
FROM yourTable
ORDER BY
ID;
为每个COUNT
获得DISTINCT
Name
的ID
的另一种方法
SELECT *,
(SELECT Count(DISTINCT NAME)
FROM @table T
WHERE T1.id = T.id) Mapping
FROM @table T1
您可以简单地使用以下查询
SELECT COUNT(DISTINCT NAME)
FROM YOUR_TABLE
GROUP BY ID
谢谢
其他方法(指定SQL Server,否则使用INNER JOIN LATERAL):
SELECT *
FROM @table f1
CROSS APPLY
(
select Count(*) Nb from @table f2
where f2.ID=f1.ID
) f3