132

我希望我的查询首先返回列包含特定值的表的行,然后返回按字母顺序排列的其余行。

如果我有一个类似这个例子的表格:

 - Table: Users
 - id - name -  city
 - 1    George  Seattle
 - 2    Sam     Miami
 - 3    John    New York
 - 4    Amy     New York
 - 5    Eric    Chicago
 - 6    Nick    New York

并使用该表,我希望我的查询首先返回包含纽约的行,然后返回按城市字母顺序排列的其余行。仅使用一个查询可以做到这一点吗?

4

3 回答 3

208

在 SQL Server、Oracle、DB2 和许多其他数据库系统上,这是您可以使用的:

ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city
于 2009-08-09T01:57:33.713 回答
108

如果您的 SQL 方言足够智能,可以将布尔表达式视为具有数值,那么您可以使用:

SELECT *
FROM `Users`
ORDER BY (`city` = 'New York') DESC, `city`
于 2009-08-08T23:41:34.390 回答
4

我的答案可能很旧且不需要,但有人可能需要不同的方法,因此将其发布在这里。

我有同样的要求实现了这个,为我工作。

Select * from Users
ORDER BY
(CASE WHEN city = 'New York' THEN 0 ELSE 1 END), city
GO

附言

这是针对SQL的

于 2017-11-27T04:19:12.310 回答