我有一个包含5列的表,选择所有行的最简单方法是什么,但每列是单独随机化的?
我能想到的是分别选择每一列,以及
row_number over ( order by newid()) as lookup
然后在查找时将每个列重新连接在一起。
有更简单的方法吗?
由于
答案 0 :(得分:4)
不,这就是它。我假设您希望每列有随机行顺序(不是来自同一随机行的所有列)。
SQL是基于行的,因此对于5列,您需要分隔每个列选择(对于每列的随机行),然后使用arbritrary行来加入结果togethers。
一个有趣的问题......
答案 1 :(得分:3)
您可以准备5
个有序集和PIVOT
个:
SELECT *
FROM (
SELECT 'col1' AS name, col1 AS col, ROW_NUMBER() OVER (ORDER BY NEWID()) AS rn
FROM table
UNION ALL
SELECT 'col2', col2, ROW_NUMBER() OVER (ORDER BY NEWID())
FROM table
UNION ALL
SELECT 'col3', col3, ROW_NUMBER() OVER (ORDER BY NEWID())
FROM table
UNION ALL
SELECT 'col4', col4, ROW_NUMBER() OVER (ORDER BY NEWID())
FROM table
UNION ALL
SELECT 'col5', col5, ROW_NUMBER() OVER (ORDER BY NEWID())
FROM table
) q
PIVOT (
MIN(col)
FOR name IN ([col1], [col2], [col3], [col4], [col5])
) pt
有关详细信息,请参阅我的博客中的此条目: