如何首先返回具有特定值的行?

时间:2009-08-08 23:39:43

标签: sql sql-order-by

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

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

 - 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

使用该表我希望我的查询首先返回包含New York的行,然后返回按城市按字母顺序排列的其余行。这可以只使用一个查询吗?

3 个答案:

答案 0 :(得分:182)

在SQL Server,Oracle,DB2和许多其他数据库系统上,您可以使用以下内容:

ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city

答案 1 :(得分:99)

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

SELECT *
FROM `Users`
ORDER BY (`city` = 'New York') DESC, `city`

答案 2 :(得分:4)

我的回答可能很旧而且不是必需的,但有人可能需要采用不同的方法,因此将其发布在此处。

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

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

PS

这适用于 SQL