我有一个表,我必须在其中枚举n个元素的行
例如,如果n = 3,我希望得到以下结果:
initial table result table
| ID | DATA | | ID | DATA |
|----|------| |----|------|
| 1 | a | | 1 | 1 a |
| 2 | b | | 2 | 2 b |
| 3 | c | | 3 | 3 c |
| 4 | d | | 4 | 1 d |
| 5 | e | | 5 | 2 e |
| 6 | f | | 6 | 3 f |
| 7 | g | | 7 | 1 g |`
我已经通过以下代码完成了我需要的工作:
UPDATE test
SET data = i.num +''+ data
FROM (
Select id, cast(ROW_NUMBER() OVER(PARTITION BY [num] ORDER BY [num])as char) as num
from (select id, (row_number() over (order by id)+2 )/3 as num from test) j) i
WHERE
i.id = test.id
但是,我认为还有更好的方法。我非常感谢您提供的任何帮助。
答案 0 :(得分:1)
你的方法很好。我将使用模数运算符的可更新CTE:
with toupdate as (
select t.*,
cast( 1 + (row_number() over (order by id) - 1) % 3 as varchar(255)) as num3
from test t
)
update toupdate
set data = num3 + ' ' + data;