-1

私はdbテーブルを持っています。選択したクエリの実行時に、最初の 5 つのレコードが特定され、順序付けられていない結果を返したいと思います。これらの 5 つのレコードの下には、順序付けられたレコードが含まれています。

  id    name 
   1      a
   2      b
   3      c
   4      d

私は以下のようにソートしたい:

  id    name
   3      c 
   1      a
   2      b
   4      d
4

1 に答える 1

3

更新あなたが提供したサンプルデータと欲求の出力に基づいて、これを行うことができます

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下の例) を適切な値 (01下の例) の選択の両方に挿入します。次に、最初にこの列による外側の選択順序で結合し、必要に応じて他の順序付けルールを適用します。

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 とそのバージョンに関する情報を常に提供してください。

于 2013-07-23T08:17:49.367 に答える