更新あなたが提供したサンプルデータと欲求の出力に基づいて、これを行うことができます
SELECT *
FROM Table1
ORDER BY CASE
WHEN id = 3 THEN 0
WHEN id = 1 THEN 1
WHEN id = 2 THEN 2
WHEN id = 4 THEN 3
ELSE 4
END, id
SQLFiddleのデモ ( SQL Server )
はこちらSQLFiddleのデモ ( MySql )はこちら
もう 1 つの方法は、1 回の選択で最初の 5 つのレコードを取得し、2 回目の選択で他のすべてのレコードを取得することです。ユーザー定義の列 (n
下の例) を適切な値 (0
と1
下の例) の選択の両方に挿入します。次に、最初にこの列による外側の選択順序で結合し、必要に応じて他の順序付けルールを適用します。
SELECT id
FROM
(
SELECT t.*, 0 n
FROM Table1 t
WHERE id IN (1,2,3,4,5)
UNION ALL
SELECT t.*, 1 n
FROM Table1 t
WHERE id NOT IN (1,2,3,4,5)
) q
ORDER BY q.n, CASE WHEN q.n = 1 THEN q.id END DESC
SQLFiddleのデモ ( SQL Server )
はこちらSQLFiddleのデモ ( MySql )はこちら
余談ですが、SQL クエリ関連の質問をするときは、サンプル データ、目的の出力、現在のクエリ、使用している RDBMS とそのバージョンに関する情報を常に提供してください。