2009-08-08 117 views
99

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

如果我有一个表是这样的例子:

- 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 

,并使用该表我想我的查询返回包含纽约的第一个行,然后再行由城市按字母顺序排列,其余。这可能只使用一个查询吗?

+0

考虑更改接受的答案到第二个如果可以的话,作为第一个只适用于MySQL的,而不是为MSSQL。 – Magisch 2017-03-06 08:23:16

+0

完成。我原来的问题是关于MySQL,但标签无论如何都没有反映出来。 – Phoexo 2017-03-06 15:25:21

+0

谢谢。今天早上我遇到了这个,试图为我遇到的问题做类似的事情。 :) – Magisch 2017-03-06 16:29:09

回答

159

在SQL服务器,Oracle,DB2,和许多其他的数据库系统,这是什么你可以使用:

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

这种方式在'db2'中工作。 – Samiron 2012-09-04 06:58:03

+4

非常好,也适用于MSSQL。 – Josh 2013-03-07 16:36:55

+2

这个作品,接受的答案不。 – 2013-08-26 19:46:47

92

如果你的SQL方言有足够的智能来治疗布尔表达式为具有数字值,那么你可以使用:

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

这个答案让我感到哑巴。干得好混乱。 – Bill 2009-08-08 23:59:49

+2

它在MSSQL上工作吗? – 2009-08-29 22:53:35

+1

@MehrdadAfshari:不,MSSQL在“ORDER BY”子句中处理对等测试太愚蠢。 – chaos 2013-09-11 15:13:44

2

我的答案可能是旧的,并不是必需的,但有人可能需要不同的方法,因此张贴在这里。

我有相同的要求实施了这个,为我工作。

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

PS

这是SQL

相关问题