столбец порядка оракула по смежным значениям, начинающимся с медианы и добавляющимся наружу с обеих сторон - PullRequest
0 голосов
/ 16 мая 2018

Было трудно придумать подходящий заголовок, так что, надеюсь, это описание и следующий пример сделают его более понятным.

У меня есть таблица с ненулевым столбцом (но не первичным ключом), чейзначение представляет собой пятизначное число, хранящееся в виде строки, такой как «00001», «00002», «00003», ..., «99999».Присутствуют не все числа (возможно, в последовательности отсутствует число).Я пытаюсь сделать запрос таким, чтобы, если дать первые две цифры числа, я мог упорядочить оператор выбора в соответствии с соседними числами, начиная со среднего значения и работая наружу.

Вот пример (sql fiddle здесь ) того, что мне нужно, но, к сожалению, я не могу использовать инструкцию case, чтобы упорядочить результаты, поскольку случаи неизвестны заранее и их может быть немало.

select number_str_id from my_table
where number_str_id like '00%'
order by 
    case to_number(number_str_id)
        when 1 then 9
        when 2 then 7
        when 3 then 5
        when 4 then 3
        when 5 then 1
        when 6 then 2
        when 7 then 4
        when 8 then 6
        when 9 then 8
    end
    asc;

Любые предложения с благодарностью.Спасибо!

1 Ответ

0 голосов
/ 16 мая 2018

(чтобы получить комментарий.)

Идет ли это в правильном направлении?

order by 
    case to_number(substr(number_str_id, 3, 1))
        when 1 then 9
        when 2 then 7
        when 3 then 5
        when 4 then 3
        when 5 then 1
        when 6 then 2
        when 7 then 4
        when 8 then 6
        when 9 then 8
    end,
    case to_number(substr(number_str_id, 4, 1))
        when 1 then 9
        when 2 then 7
        when 3 then 5
        when 4 then 3
        when 5 then 1
        when 6 then 2
        when 7 then 4
        when 8 then 6
        when 9 then 8
    end,
    case to_number(substr(number_str_id, 5, 1))
        when 1 then 9
        when 2 then 7
        when 3 then 5
        when 4 then 3
        when 5 then 1
        when 6 then 2
        when 7 then 4
        when 8 then 6
        when 9 then 8
    end

Я не уверен, что понимаю вашу логику здесь.

...