SQL Server通过每个ID获得不同的名称计数

时间:2019-02-21 04:42:08

标签: sql sql-server

我有一个像这样的数据集:

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))没有返回正确的值。

4 个答案:

答案 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 

Online Demo

答案 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