在SQL中为选定的重复值添加字符

1 sql sql-server return-value duplicates

我需要为选定的重复值添加字符/数字.

这就是我需要的:

SELECT Name -- Here I need to add for example 1 if It have duplicates
            -- If It is hard way to code, how to add 1 to all selected values?
FROM Example
WHERE Id BETWEEN 25 AND 285
Run Code Online (Sandbox Code Playgroud)

如果有2个相同的名称Peter它应该选择Peter和第二个Peter1

如果没有简单的方法来制作它,如何添加1到所有选定的行?应该选择Peter1而不是Peter

我试过这个:

SELECT Name + ' 1' AS Name -- in this case selecting wrong column
FROM Example
WHERE Id BETWEEN 25 AND 285
Run Code Online (Sandbox Code Playgroud)

编辑

SELECT @cols += ([Name]) + ','
    FROM   (SELECT  Name --I neeed to integrate It here
            FROM    FormFields
            WHERE   ID BETWEEN 50 AND 82
            ) a 
Run Code Online (Sandbox Code Playgroud)

如果我用这个:

SELECT @cols += ([Name]) + ',' -- here throws error
FROM   (SELECT Name + CASE WHEN RowNum = 1 THEN '' ELSE CONVERT(NVARCHAR(100), RowNum-1) END AS [UpdatedName]
                FROM (
                SELECT  Name AS Name,  
                        ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Name) AS "RowNum"
                FROM    FormFields
                WHERE   Id Between 50 And 82) x
        ) a
Run Code Online (Sandbox Code Playgroud)

它抛出错误: Invalid column name 'Name'.

编辑2

这是不同的测试,但其中一些具有相同的标准.这就是我需要重命名的原因. howshouldbe

Siy*_*ual 5

您可以通过获取Row_Number并使用a 来完成此操作Case.这是一个例子SQL Server:

;With Cte As
(
    Select  Name, Row_Number() Over (Partition By Name Order By Name) RN
    From    Example
    Where   Id Between 25 And 285
)
Select  Case When RN = 1 Then Name Else Name + Cast((RN - 1) As Varchar (3)) End As Name
From    Cte
Run Code Online (Sandbox Code Playgroud)