我有一个数据库表。 我想在选择查询运行时转动前5条记录特定且未排序的结果,在这5条记录下方排序记录。
id name
1 a
2 b
3 c
4 d
我想排序如下:
id name
3 c
1 a
2 b
4 d
答案 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
)注入两个选项,并选择适当的值(下例中为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及其版本。