2009-05-22 67 views
2

我有一个表中有5列,什么是最简单的方法来选择所有行,但每列是单独随机化?如何从表中随机选择列在TSQL

所有我能想到的是分别选择每列,与

row_number over (order by newid()) as lookup 

一起,然后加入每一列回一起查找。

有没有更简单的方法?

谢谢

回答

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 

详情请参见我的博客此项:

4

不,这是非常多的。我假设你想要每列随机行顺序(不是从同一个随机行的所有列)。

SQL是基于行的,因此对于5列,需要将每列选择(对于每列的随机行)分开,然后使用arbritrary行将结果连接起来。

一个有趣的问题......