列に特定の値が含まれるテーブルの行を最初にクエリに返し、次にアルファベット順に残りの行を返します。
この例のようなテーブルがある場合:
- 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つのクエリのみを使用して実行できますか?
SQL Server、Oracle、DB2、および他の多くのデータベースシステムでは、これを使用できます。
ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city
SQLダイアレクトが、ブール式を数値として扱うのに十分なインテリジェントである場合、以下を使用できます。
SELECT *
FROM `Users`
ORDER BY (`city` = 'New York') DESC, `city`
私の答えは古くて必要ではないかもしれませんが、誰かが別のアプローチを必要とするかもしれません。
私は同じ要件でこれを実装し、私のために働きました。
Select * from Users
ORDER BY
(CASE WHEN city = 'New York' THEN 0 ELSE 1 END), city
GO
PS
これは[〜#〜] sql [〜#〜]