SQL动态地将数字附加到记录

时间:2015-09-22 09:07:58

标签: sql sql-server group-by

使用SQL Server 2012,我有以下数据:

Reference      Value
---------------------
1              val
1              val
1              val
2              val
2              val
3              val
3              val

我需要根据唯一引用的数量将值附加到Value。只有在列表中有不同的引用,即多个唯一的引用时,才能执行此操作:

Reference      Value
---------------------
REF123         val 1
REF123         val 1
REF123         val 1
REF789         val 2
REF789         val 2
REF999         val 3
REF999         val 3

2 个答案:

答案 0 :(得分:0)

使用相关的子查询来计算(不同的)此行和更早的参考值。

select reference, value + ' ' + cast((select count(distinct t2.Reference)
                                      from tablename t2
                                      where t2.Reference <= t1.Reference) as varchar(11))
from tablename t1

思考+是SQL Server concat(ANSI SQL ||),而CAST可能是CONVERT ...

答案 1 :(得分:0)

您可以尝试以下操作:

SELECT Reference, Value + CASE WHEN (SELECT COUNT(DISTINCT Reference) FROM @t ) > 1 
                           THEN CAST(DENSE_RANK() OVER(ORDER BY Reference) AS VARCHAR(20)) 
                           ELSE '' 
                          END
FROM TableName