Вот запрос, который должен вести себя так, как вы хотите. Мы должны выделить два числовых компонента subcase_id
, а затем привести их к целым числам, чтобы избежать сортировки этого столбца как текста.
SELECT
case_id,
subcase_id,
ROW_NUMBER() OVER (PARTITION BY case_id
ORDER BY TO_NUMBER(SUBSTR(subcase_id, 1, INSTR(subcase_id, '-') - 1)),
TO_NUMBER(SUBSTR(subcase_id, INSTR(subcase_id, '-') + 1))) rn
FROM yourTable
ORDER BY
case_id,
TO_NUMBER(SUBSTR(subcase_id, 1, INSTR(subcase_id, '-') - 1)),
TO_NUMBER(SUBSTR(subcase_id, INSTR(subcase_id, '-') + 1));
Демо
Не следует рассматривать столбец subcase_id
как текст и числа. Если вам действительно нужна сортировка по этому столбцу в течение длительного времени, я предлагаю разделить два числовых компонента на отдельные числовые столбцы.