我希望我的查询首先返回表中包含特定值的行的行,然后返回按字母顺序排列的其余行。
如果我有一个类似这个例子的表:
- 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的行,然后返回按城市按字母顺序排列的其余行。这可以只使用一个查询吗?
答案 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