以非数字顺序排序

时间:2011-08-05 14:05:01

标签: sql

我正在尝试以非字母数字顺序排序查询结果。例如,如果列的可能值为“1”,“2”和“3”。 ORDER BY asc将首先显示带'1'的行,然后显示带'2'的行,最后显示带'3'的行。 ORDER BY desc会做对手。

如果我需要不同的订单,例如3,1,2或1,3,2,该怎么办?这可能吗?

谢谢

4 个答案:

答案 0 :(得分:7)

您希望在order by by子句中使用case语句。

因此,对于您的3,1,2示例,它看起来像这样:

ORDER BY
    CASE <yourField>
        WHEN 3 THEN 1
        WHEN 1 THEN 2
        WHEN 2 THEN 3
        ELSE 4 END ASC

答案 1 :(得分:1)

但是,您可能无法指定要查找的订单。如果您只是在寻找随机订单,可以使用ORDER BY NEWID()

答案 2 :(得分:1)

您可以添加自己的名为my_order的列 然后order by my_order

答案 3 :(得分:1)

您实际上没有排序和某个序列一样多。你怎么指定这个?如果我们将行集合视为索引数组,那么您可以创建一个辅助索引表:

position  refers_to
   1         3
   2         1
   3         2
   .         .
   .         .

然后您可以加入表格ON(index_table.refers_to = my_table.that_column) ORDER BY index_table.position

相关问题