假设我有一个包含两列的表格:
id | value
----------
1 | 101
2 | 356
3 | 28
我需要随机排列值列,以便为每个 id 随机分配现有集合 {101,356,28} 中的新值。我如何在 Oracle SQL 中执行此操作?
这可能听起来很奇怪,但这是一个真正的问题,只是列更多了。
最佳答案
您可以通过将 row_number()
与随机数生成器一起使用,然后连接回原始行来完成此操作:
with cte as (
select id, value,
row_number() over (order by id) as i,
row_number() over (order by dbms_random.random) as rand_i
from table t
)
select cte.id, cte1.value
from cte join
cte cte1
on cte.i = cte.rand_i;
这保证了排列(即没有原始行的值被使用两次)。
编辑:
顺便说一句,如果原始 id
从 1 开始连续且没有间隙,您可以这样做:
select row_number() over (order by dbms.random) as id, value
from table t;
关于sql - 在 SQL 中排列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25383475/