对表的单行的2组不同值进行排序

时间:2015-09-21 06:59:18

标签: sql oracle sql-order-by

我有下表,

A             B            C
--------   ----------     -----------
Akhil      Kerala         0008 – 0030
Athul      Kerala         15
Basil      Delhi          0031 – 0059
Rahul      Chennai        32
Kishore    New York       0060 – 0090
Anoop      Mumbai         45

我必须根据C列对条目进行排序,列的排序顺序应该是这样的, 15

32

45

0008 - 0030

0031 - 0059

0060 - 0090

请咨询。提前谢谢。

1 个答案:

答案 0 :(得分:0)

Oracle SQL:

select t.*, 
  to_number(decode(instr(c,' '),5,null,c)) atr1,
  decode(instr(c,' '),5,c,null) atr2
from TEST_TAB t
order by atr1, atr2

如果表有很多行,并且经常执行查询,那么你应该添加这个索引:

create index sort_idx on TEST_TAB (
  to_number(decode(instr(c,' '),5,null,c)),
  decode(instr(c,' '),5,c,null)
);

如果您使用例如然后MSSQL数据库用CASE语句替换DECODE,用CHARINDEX替换INSTR。