web-dev-qa-db-ja.com

特定の値を持つ行を最初に返すにはどうすればよいですか?

列に特定の値が含まれるテーブルの行を最初にクエリに返し、次にアルファベット順に残りの行を返します。

この例のようなテーブルがある場合:

 - 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

そして、そのテーブルを使用して、最初にニューヨークを含む行を返し、次に都市のアルファベット順に並べられた残りの行を返すクエリを作成します。これは、1つのクエリのみを使用して実行できますか?

116
Phoexo

SQL Server、Oracle、DB2、および他の多くのデータベースシステムでは、これを使用できます。

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

SQLダイアレクトが、ブール式を数値として扱うのに十分なインテリジェントである場合、以下を使用できます。

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

私の答えは古くて必要ではないかもしれませんが、誰かが別のアプローチを必要とするかもしれません。

私は同じ要件でこれを実装し、私のために働きました。

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

PS

これは[〜#〜] sql [〜#〜]

4
Manjuboyz