我正在尝试以非字母数字顺序排序查询结果。例如,如果列的可能值为“1”,“2”和“3”。 ORDER BY asc将首先显示带'1'的行,然后显示带'2'的行,最后显示带'3'的行。 ORDER BY desc会做对手。
如果我需要不同的订单,例如3,1,2或1,3,2,该怎么办?这可能吗?
谢谢
答案 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
。