J'ai un tableau comme ci-dessous,
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 № 1Quelque 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