如何在SQL中以随机顺序从表中选择列

时间:2009-05-22 16:40:02

标签: sql sql-server tsql

我有一个包含5列的表,选择所有行的最简单方法是什么,但每列是单独随机化的?

我能想到的是分别选择每一列,以及

row_number over ( order by newid()) as lookup

然后在查找时将每个列重新连接在一起。

有更简单的方法吗?

由于

2 个答案:

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

有关详细信息,请参阅我的博客中的此条目: