/ / rank()またはrow_number()カラムを作成する - sql-server、tsql

rank()またはrow_number()カラムを作成する - sql-server、tsql

私は以下のようなテーブルを持っています、

ここに画像の説明を入力

私たちが "n"列をチェックすると、その二重同じ質問がansSecIDで区切られた複数の回答で繰り返されます。

QuestionId + AnsSecId = unique row

作成することはできますか rank() "n"の列。 e.g. n = 8, has 2 rows. So i want 8_1, 8_2.

または

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

または何かのような rank() カラム。 some 1,2,3 row no。 for repetitive n.

1つの質問に対して最大3つの回答があります。

回答:

回答№1は2

このようなもの:

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

実際、あなたの repeat コラムは 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については2

これを試して、私はコンピュータ上ではないが、これは動作するはずです。パーティションにnを使用することもできます

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