-1

我有一个数据库表。我想在选择查询运行时将结果前 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

另一种方法是在一次选择中获取前五条记录,在第二次中获取所有其他记录;将用户定义的列(在下面的示例中)注入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 及其版本的信息。

于 2013-07-23T08:17:49.367 回答