2011-05-10 126 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