如何在选择查询的顶部设置确定的记录?

时间:2013-07-23 07:41:46

标签: sql select

我有一个数据库表。 我想在选择查询运行时转动前5条记录特定且未排序的结果,在这5条记录下方排序记录。

  id    name 
   1      a
   2      b
   3      c
   4      d

我想排序如下:

  id    name
   3      c 
   1      a
   2      b
   4      d

1 个答案:

答案 0 :(得分: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)注入两个选项,并选择适当的值(下例中为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及其版本。