2

クエリ:

SELECT * FROM station

出力:

id | stationname | total
-------------------------
 1 | Khar        | 5
 2 | SantaCruz   | 3
 3 | Sion        | 2
 4 | VT          | 1
 5 | newFort     | 3
 6 | Bandra      | 2
 7 | Worli       | 1
 8 | Sanpada     | 3
 9 | Joe         | 2
10 | Sally       | 1
11 | Elphiston   | 2
12 | Currey Road | 1

すべてのレコードを表示することは可能ですが、特定のレコードを 1 番目以降に表示し、残りのすべてのレコードを表示するという条件はありますか?

たとえば、私のwhere状態は

where id=10

望ましい出力:

id | stationname | total
-------------------------
10 | Sally       | 1
 1 | Khar        | 5
 2 | SantaCruz   | 3
 3 | Sion        | 2
 4 | VT          | 1
 5 | newFort     | 3
 6 | Bandra      | 2
 7 | Worli       | 1
 8 | Sanpada     | 3
 9 | Joe         | 2
11 | Elphiston   | 2
12 | Currey Road | 1

任意のアイデア、ヒントをいただければ幸いです

4

2 に答える 2

3

OPによって提示されたケースでは、 aを使用するUNION ALLと機能する可能性がありますが、無差別に使用すると予期しない結果につながる可能性のあるいくつかの落とし穴があります。

検索されたソート順は、リストの最初(この例では0)idが保証されるように選択できる場合、これらの問題を軽減します。

SELECT * 
FROM   Station 
ORDER BY
       CASE WHEN id = 10 THEN 0 ELSE id END

このSQLFiddleを参照してください (設定についてはhims056へのcudo)

于 2012-11-24T10:59:07.410 に答える
3

UNION ALL次のように使用して、2 つの異なるクエリを結合できます。

SELECT * FROM Station WHERE ID=10
UNION ALL
SELECT * FROM Station WHERE ID<>10

このSQLFiddleを参照してください


更新返品された注文が未定義であることに関連)

UNION両方のクエリ (とを使用UNION ALL)の実行計画が表示される場合、 を使用UNIONしたクエリは結果を並べ替えますが、 を使用したクエリは結果を並べ替えUNION ALLませこの SQLFiddleで両方のクエリの実行計画を参照してください。

UNIONクエリを使用した実行計画:

ここに画像の説明を入力

UNION ALLクエリを使用した実行計画:

ここに画像の説明を入力

これは SQL SERVERから見つけました– UNION と UNION ALL の紹介と例

于 2012-11-24T10:48:18.517 に答える