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
这是不同的测试,但其中一些具有相同的标准.这就是我需要重命名的原因.
您可以通过获取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)
归档时间: |
|
查看次数: |
999 次 |
最近记录: |