Classificação de colunas alfanuméricas do Oracle
Estou trabalhando para classificar a coluna de revisão de uma tabela de banco de dados Oracle na ordem ASC conforme abaixo. A princípio, as revisões numéricas a serem classificadas (1,2,3,…). Posteriormente Alfa-Numérico para ser classificado da seguinte forma: A, B, B1, C, C1, C2,…,Y, Y2, Y3, Z, AA, AB,..,DA, …ZZ, etc. Row_Number() em a instrução SELECT a ser preenchida com 1,2,3… para cada documento# (ABC, XYZ) após a classificação da revisão.
Veja a imagem carregada para a tabela necessária.
Eu tentei com SUBSTR , Order by, etc, mas não consegui resolver de acordo com o requisito acima. Alguém pode me ajudar com isso ? Obrigado!

Respostas
Pelo que entendi sua pergunta, você deseja colocar as últimas revisões que contenham apenas dois caracteres e nenhum dígito.
Você pode usar uma classificação condicional:
select
t.*,
row_number() over(
partition by doc#
order by
case when regexp_like(revision, '^\w\d?$') then 0 else 1 end,
revision
) rn
from t
order by doc#, rn
A expressão regular descreve uma string começando com um caractere alfanumérico, opcionalmente seguido por um dígito: essas revisões devem vir primeiro. Demonstração no DB Fiddle :
with t as (
select 'ABC' doc#, '1' revision from dual
union all select 'ABC', '2' from dual
union all select 'ABC', '3' from dual
union all select 'ABC', 'A' from dual
union all select 'ABC', 'B' from dual
union all select 'ABC', 'B1' from dual
union all select 'ABC', 'C' from dual
union all select 'ABC', 'C1' from dual
union all select 'ABC', 'D' from dual
union all select 'ABC', 'AA' from dual
union all select 'ABC', 'AB' from dual
union all select 'ABC', 'BA' from dual
union all select 'ABC', 'DA' from dual
)
select
t.*,
row_number() over(
partition by doc#
order by
case when regexp_like(revision, '^\w\d?$') then 0 else 1 end,
revision
) rn
from t
order by doc#, rn
Nº DOC | REVISÃO | RN :--- | :------- | -: ABC | 1 | 1 ABC | 2 | 2 ABC | 3 | 3 ABC | A | 4 ABC | B | 5 ABC | B1 | 6 ABC | C | 7 ABC | C1 | 8 ABC | D | 9 ABC | AA | 10 ABC | AB | 11 ABC | BA | 12 ABC | DA | 13
Existe um método antigo bem conhecido: rpad(col, max-length, '0')
Por exemplo rpad(col, max(length(col)) over(), '0'