2015-09-22 2 views
-1

Использование SQL Server 2012, у меня есть следующие данные:SQL динамически добавлять номера к записям

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

Мне нужно добавить номер к стоимости следующим образом на основе количества уникальных ссылок. Это должно быть сделано только тогда, когда существуют различные Упоминание в списке т.е. более чем одним уникальным:

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

ответ

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 
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 ...

+0

Спасибо, вы можете это объяснить линия пожалуйста - где t2.Reference <= t1.Reference –

+0

Count различных строк суб-Select с эталонным значением меньше или равно главного-запрос справочном значения. – jarlh

+0

Это не подходит для сценария, где есть только одна уникальная ссылка. Он по-прежнему будет помечать значение с помощью 1 –

Смежные вопросы