2009-05-22 74 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行將結果連接起來。

一個有趣的問題......