用随机值替换列值

时间:2017-10-23 00:42:28

标签: sql sql-server-2005

我想用随机值替换列中的值

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

1 个答案:

答案 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;