тупой и многословный, но должен работать:
select name, case when substr (name, 1, 3) = 'ADL' then 1
when substr (name, 1, 3) = 'LAS' then 2
when substr (name, 1, 4) = 'TWUP' then 3
when substr (name, 1, 2) = 'FG' then 4
when substr (name, 1, 2) = 'FH' then 5
else 6
end SortOrder
from myTable
order by 2, 1;
Не уверен, что 6 - правильное место для сортировки других предметов, но очевидно, как это исправить. По крайней мере, понятно, что происходит, даже если я понятия не имею, почему вы делаете это таким образом.
РЕДАКТИРОВАТЬ : Если это единственные значения, вы можете изменить строки 4 и 5:
select name, case when substr (name, 1, 3) = 'ADL' then 1
when substr (name, 1, 3) = 'LAS' then 2
when substr (name, 1, 4) = 'TWUP' then 3
when substr (name, 1, 1) = 'F' then 4
else 6
end SortOrder
from myTable
order by 2, 1;
ДРУГОЕ РЕДАКТИРОВАНИЕ : И снова, если это единственные значения, вы можете упростить еще больше. Поскольку только один не соответствует порядку серии F *, вы можете принудительно завершить их и использовать фактическую первую букву для всех остальных. Это проще, но слишком сильно зависит от точных значений для моих предпочтений. С другой стороны, он удаляет многие, казалось бы, ненужные вызовы substr
:
select name, case when substr (name, 1, 1) = 'F' then 'Z'
else name
end SortOrder
from myTable
order by 2, 1;