[帮助-SQL]:当我下次使用随机函数更新表列时,我不想在单元格中使用相同的数字

时间:2018-07-22 17:07:47

标签: sql random qsqlquery

我有以下查询来更新[SetID]列中的随机数。

“ UPDATE Employee SET SetID = CAST(RAND(CHECKSUM(NEWID()))* 5为INT)+ 1” Update Random Number query

但是有时候我在执行查询后在几行上得到相同的数字。我不想在该行上再次重复以前的号码。提前致谢。 :)

1 个答案:

答案 0 :(得分:0)

您的问题非常模棱两可,但是我没有足够的名声让您澄清一下...所以我要解释的是要将SetID设置为1到5之间的数字,而您没有想要使用与UPDATE之前的行相同的数字。如果是这样,那么这就是我的答案:

update E SET SetID = case when SetID <> r1.R1To5 then r1.R1To5
                            when SetID <> r2.R1To5 then r2.R1To5
                            when SetID <> r3.R1To5 then r3.R1To5
                            when SetID <> r4.R1To5 then r4.R1To5
                            when SetID <> r5.R1To5 then r5.R1To5
                        else case when SetID = 5 then 1
                                else SetID +1
                             end
                        end

from Employee E
cross apply  (VALUES (CAST(RAND(CHECKSUM(NEWID())) * 5 as INT) + 1 )) r1 (R1To5)
cross apply  (VALUES (CAST(RAND(CHECKSUM(NEWID())) * 5 as INT) + 1 )) r2 (R1To5)
cross apply  (VALUES (CAST(RAND(CHECKSUM(NEWID())) * 5 as INT) + 1 )) r3 (R1To5)
cross apply  (VALUES (CAST(RAND(CHECKSUM(NEWID())) * 5 as INT) + 1 )) r4 (R1To5)
cross apply  (VALUES (CAST(RAND(CHECKSUM(NEWID())) * 5 as INT) + 1 )) r5 (R1To5)
GO