Sql server 遇到重复项时追加其他列中的值

Sql server 遇到重复项时追加其他列中的值,sql-server,tsql,duplicates,Sql Server,Tsql,Duplicates,在这种情况下,我有一组重复记录,对于集合中的每一个其他重复记录,我希望通过追加表中其他列的值使其唯一 请参见以下预期输出: Column1 Column2 NewUniqueColumn ABC A ABC BCD B BCD EFG D EFG DEE E DEE ABC Z ABC-Z EFG X EFG-X 我

在这种情况下,我有一组重复记录,对于集合中的每一个其他重复记录,我希望通过追加表中其他列的值使其唯一

请参见以下预期输出:

Column1     Column2   NewUniqueColumn
ABC          A      ABC
BCD          B      BCD
EFG          D      EFG
DEE          E      DEE
ABC          Z      ABC-Z
EFG          X      EFG-X
我知道一个可能的解决方案是使用下面的GROUPBY子句的case语句

select
case when column 1 in 
 (select column1 from sampletable group by column1 having count(*) > 1)
then column1 +'-'+column2
else column1 end as NewUniqueColumn
from sampletable
然而,我希望通过编写更少的代码,比如

select column1+ column2 over (partition by column1 order by column1 ) from sampletable 

但是我无法确定我应该为column1+column2使用哪个函数,实际上我建议不要在当前表中使用任何DML。它已经具备了区分每个“重复项”所需的所有信息。只需使用
行编号

SELECT
    column1,
    column2,
    column1 + '-' + CONVERT(varchar(10),
        ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2)) AS NewUniqueColumn
FROM sampletable;
我建议这样做是因为当给定的
column1
值有两个或多个记录具有相同的
column2
值时,您当前的范例再次崩溃

编辑:

如果确实希望逐字查询确切的预期输出,请尝试以下操作:

SELECT
    column1,
    column2,
    CASE WHEN ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY column2) = 1
         THEN column1
         ELSE column1 + '-' + column2 END AS NewUniqueColumn
FROM sampletable;


添加行号对unique键没有意义,因为它是一个随机整数值,这就是为什么每当遇到重复的行号时,我都要追加第2列值。追加的行号值没有任何随机性。当给定的
column1
值有两个或多个记录具有相同的
column2
值时,您关于追加
column2
的建议就失效了。@Zee786我还包括了一个查询,以查询您确切的预期输出。但是,我仍然更喜欢我的第一个版本。我认为第二个版本对我适用,我想从column2中附加值而不是行号的原因是因为column2与column1有些关联,并且对用户来说比附加行号更有意义。示例数据最好作为+。请把你的问题包括在内。欲知详情,,