我想用随机值替换列中的值
NO LINE
-- ----
1 1
1 2
1 3
1 4
2 1
2 2
3 1
4 1
4 2
我想将列NO随机化并替换为随机值。我有500万条记录,做类似下面的脚本给了我500万个独特的NO,但是你可以看到NO不是唯一的,我想要为同一个NO分配相同的随机值。
UPDATE table1
SET NO= abs(checksum(NewId())) % 100000000
我想要我的结果数据集如下
NO LINE
------ ----
99 1
99 2
99 3
99 4
1092 1
1092 2
3456 1
41098 1
41098 2
答案 0 :(得分:1)
我建议rand()
使用种子:
UPDATE table1
SET NO = FLOOR(rand(NO) * 100000000);
这会产生轻微的冲突风险,因此两个不同的NO
行可以获得相同的值。
如果数字不需要是“随机”,你可以按任意顺序给它们连续的值并避免碰撞:
with toupdate as (
select t1.*,
dense_rank() over (order by rand(NO), no) as new_no
from t
)
update toupdate
set no = new_no;