2011-05-10 169 views
1

我有一個表看起來像這樣選擇所有,並給隨機輸出(隨機排序輸出)

ID Name City 
------------- 
0 asd sda 
1 hrs gsh 
2 ghd 0 
3 hsa 0 
. 
. 

我怎麼能回城!=「0」以隨機順序,然後城市=「0」隨機順序?

+1

您使用了哪個數據庫?你是否必須以隨機順序返回數據,或者一旦返回就可以洗牌? – Gabe 2011-05-10 05:36:14

+0

你有什麼打算? – BitKFu 2011-05-10 05:37:03

+0

我有一個MS SQL 2008服務器。這個想法是,首先我想以隨機順序輸出我有關信息的所有信息,然後以隨機順序輸出。通過這種方式,我會在丟失一些信息的地方獲得較低優先級,但仍然以隨機順序返回它們。 – Mikael 2011-05-10 05:53:32

回答

1

對於SQL Server(RAND給SQL Server中的所有行相同值)

ORDER BY 
    CASE WHEN City <> '0' THEN 1 ELSE 2 END, 
    NEWID() 
+0

謝謝,效果很好! – Mikael 2011-05-10 06:02:31

1

假設你的DBMS支持在結果集返回不同的隨機數的每一行RAND函數:

SELECT ID, Name, City 
    FROM SomethingLikeThis 
ORDER BY CASE WHEN City = 0 THEN 1 ELSE 0 END, RAND(); 
+1

在SQL Server中不起作用 – gbn 2011-05-10 05:58:30

+0

@gbn:全世界都沒有使用SQL Server,並且提問者在我回答時沒有說他正在使用哪個DBMS。如果稱爲RAND()的函數是如此確定性的(非隨機的),它爲每一行提供相同的答案,其中一個留下想知道它的用途是什麼。但是,可能有其他功能可以設法產生隨機輸出,或者您可以編寫一個存儲過程來實現這一功能,而且我的答案的一般要點仍然有效:按兩個僞列排序,一個命名城市來在編號之前,另一個大組內的順序是隨機的。 – 2011-05-10 06:04:17

+0

蘭德評估一次*每個查詢*不是「確定性」。我評論說,因爲你的答案有一個upvote,否則我不會困擾。對於其他非確定性函數(如getdate),SQL Server對每個查詢評估也具有相同的評估。 Newid每行都進行評估,因爲它在統計上是獨一無二的 – gbn 2011-05-10 06:10:05