如何重命名SQL Server中的重复值

时间:2017-12-15 18:13:29

标签: sql-server

我有两列我想要带回来,第一列(ID)有多个与每个ID相关联的名称。这些值存在于同一个表中。

我不想更新实际的表格,并试图弄清楚如何添加/修改重复记录的名称。

理论上,我的查询最终会有两列:

ID                 Name
--------------------------
1                  A
2                  B
3                  C1
3                  C2
3                  C3

有没有办法在提取时为重复值添加值而不更新实际表?

2 个答案:

答案 0 :(得分:1)

这样的事情可以做到:

SELECT
    ID
    ,
        Name +
        CASE
            WHEN COUNT(*) OVER (PARTITION BY ID) = 1
            THEN ''
            ELSE CAST(ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) AS varchar)
        END Name
FROM YourTable

答案 1 :(得分:0)

听起来像是在找VIEW,就像这样:

CREATE VIEW dbo.vPartitioned AS
SELECT 
    ID, 
    char(64 + ID) + 
        CASE 
        WHEN COUNT(*) OVER (PARTITION BY ID) > 1 THEN CONVERT(nvarchar, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID)) 
        ELSE '' 
        END Name 
FROM [table]

然后,从视图而不是表中选择。但请注意,Name的顺序是任意的,每次从视图中选择时都可能不一样。