/ / create column () ou row_number () colonne - sql-server, tsql

Créer la colonne rank () ou row_number () - sql-server, tsql

J'ai un tableau comme ci-dessous,

entrer la description de l'image ici

Si nous vérifions "n" colonne, son double - même si Question se répète avec plusieurs réponses séparées par ansSecID.

QuestionId + AnsSecId = unique row

Puis-je créer rank() colonne pour "n". e.g. n = 8, has 2 rows. So i want 8_1, 8_2.

ou

for n = 17, can I get 17_1,17_2,17_3

Ou quelque chose comme rank() colonne. some 1,2,3 row no. For repetitive n.

max sera 3 réponses pour 1 question.

Réponses:

2 pour la réponse № 1

Quelque chose comme ça:

select (cast(n as varchar(255)) +
(case when count(*) over (partition by n) > 1
then "_" + cast(row_number() over (partition by n order by anssecid) as varchar(255))
else ""
end)
) as new_n

En fait, votre repeat colonne semble faire le travail pour le when:

select (cast(n as varchar(255)) +
(case when repeat > 0
then "_" + cast(row_number() over (partition by n order by anssecid) as varchar(255))
else ""
end)
) as new_n

2 pour la réponse № 2

Essayez ceci, je ne suis pas sur un ordinateur mais cela devrait fonctionner. Pourrait également utiliser n pour la partition

select Cast (n as varchar)+"-"+cast (r as varchar) str
from (
Select n, row_number() over (partition by q_id order by anssecid) r
from table
) x