按自定义顺序排序SQL查询

时间:2013-08-13 15:18:04

标签: sql select sql-order-by

我有这样的自定义订购需求:

normal ordering  |  custom ordering 
      1          |        7
      2          |        6
      3          |        5
      4          |        4
      5          |        3
      6          |        2
      7          |        8
      .          |        .
      .          |        .
      .          |        .
      .          |        .
      .          |        N
      N          |        1

我考虑过使用UNIONORDER BYLIMIT的帮助下合并3个不同的选择查询。但是,我不能这样做,因为UNION必须在 ORDER BYLIMIT之前使用

如何进行选择(或选择)以实现上述自定义排序?

另一种解决方法可能有帮助,只需将此选择查询中返回的第一条记录作为最后一条记录,但如何?

2 个答案:

答案 0 :(得分:2)

使用两列CustomSeqValue添加新表Sequence。在该表中,您可以存储值及其自定义顺序。然后加入该表并按其Sequence列进行排序。

答案 1 :(得分:2)

试试这个:

SELECT x
FROM t1
ORDER BY
    CASE
      WHEN x = 1 THEN 100000001
      WHEN x between 2 and 7 THEN 7 - x
      WHEN x between 8 and ( SELECT max(x) FROM t1 ) - 1 THEN x
      ELSE 100000000 
    END 

100000000常数必须大于N.
这是simple demo