132

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

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

 - 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 つだけ使用してこれを行うことは可能ですか?

4

3 に答える 3

208

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

ORDER BY CASE WHEN city = 'New York' THEN 1 ELSE 2 END, city
于 2009-08-09T01:57:33.713 に答える
108

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

SELECT *
FROM `Users`
ORDER BY (`city` = 'New York') DESC, `city`
于 2009-08-08T23:41:34.390 に答える
4

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

これを実装するのと同じ要件がありましたが、うまくいきました。

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

PS

これはSQL用です

于 2017-11-27T04:19:12.310 に答える