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

问题描述 投票:0回答:4

我有一个数据集,如:

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

sql sql-server
4个回答
4
投票

您可以尝试使用COUNT作为分析函数:

SELECT
    ID,
    Name,
    COUNT(*) OVER (PARTITION BY ID) Mapping
FROM yourTable
ORDER BY
    ID;

1
投票

为每个COUNT获得DISTINCT NameID的另一种方法

SELECT *, 
       (SELECT Count(DISTINCT NAME) 
        FROM   @table T 
        WHERE  T1.id = T.id) Mapping 
FROM   @table T1 

Online Demo


0
投票

您可以简单地使用以下查询

SELECT COUNT(DISTINCT NAME)
FROM   YOUR_TABLE
GROUP  BY ID

谢谢


0
投票

其他方法(指定SQL Server,否则使用INNER JOIN LATERAL):

SELECT *
FROM @table f1
CROSS APPLY
(
    select Count(*) Nb from @table f2
    where f2.ID=f1.ID
) f3
© www.soinside.com 2019 - 2024. All rights reserved.