如何使用“order by”sql子句在开头使用指定数据对数据进行排序

时间:2009-08-06 19:23:55

标签: sql oracle plsql

我目前有一个数据表(/ grid)可以分页,过滤和排序。在桌子上我也有一个内置的复选框列。现在,分页,过滤和排序都在SQL查询中进行。我希望能够做的是按复选框列中单击的项目排序。这会将所有检查的项目带到表格的前面。由于复选框本身都是客户端,我不能告诉SQL查询按不存在的列排序(可能我需要动态创建一个?)

本质上我认为会发生的是,复选框ID值将被发送到查询中,SQL查询本身会以某种方式知道按先排序,然后按指定的其他排序。

点击1,2和3的地方:

SELECT * FROM Blah ORDER BY(从Blah WHERE ID IN(1,2,3)中选择ID),AnotherColumnToSort

无论如何,这是计划,任何人都有关于如何实现这一目标的任何想法?

更新: Smack 我在Oracle DB上,而不是像我想象的那样在SQL Server上。

2 个答案:

答案 0 :(得分:5)

选中行时,BIT字段设为1,否则为0,然后按该字段排序:

SELECT *
FROM Blah
ORDER BY Checked DESC, AnotherColumnToSort

如果您不想(或不能)存储是否在表中检查了行,请使用CASE子句派生它:

SELECT *
FROM Blah
ORDER BY
  CASE
    WHEN ID IN (1, 2, 3) THEN 1
    ELSE 0
  END DESC,
  AnotherColumnToSort

答案 1 :(得分:1)

我会避免重新查询你已经拥有的数据 - 它不会很好地扩展,你只会遇到问题。很多第三方网格都提供这种功能(我敢说,所有付费网格附近都有这个功能)。