Tri des colonnes alphanumériques Oracle
Je travaille sur le tri de la colonne de révision d'une table de base de données Oracle dans l'ordre croissant comme ci-dessous. D'abord les révisions numériques à trier (1,2,3,…). Par la suite Alpha-Numérique à trier comme suit : A, B, B1, C, C1, C2,…,Y, Y2, Y3, Z, AA, AB,..,DA, …ZZ, etc. Row_Number() in l'instruction SELECT à remplir avec 1,2,3… pour chaque numéro de document (ABC, XYZ) après le tri des révisions.
Voir l'image téléchargée pour le tableau requis.
J'ai essayé avec SUBSTR , Order by, etc. mais je n'ai pas réussi à trier selon l'exigence ci-dessus. Quelqu'un peut-il m'aider à ce sujet? Merci!

Réponses
Si je comprends bien votre question, vous souhaitez mettre les dernières révisions qui ne contiennent que deux caractères et aucun chiffre.
Vous pouvez utiliser un tri conditionnel :
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
L'expression régulière décrit une chaîne commençant par un caractère alphanumérique, éventuellement suivi d'un chiffre : ces révisions doivent venir en premier. Démo sur 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
DOC# | RÉVISION | RN :--- | :------- | - : ABC | 1 | 1 ABC | 2 | 2 ABC | 3 | 3 ABC | Un | 4 ABC | B | 5 ABC | B1 | 6 ABC | C | sept ABC | C1 | 8 ABC | D | 9 ABC | AA | dix ABC | AB | 11 ABC | BA | 12 ABC | AD | 13
Il existe une ancienne méthode bien connue : rpad(col, max-length, '0')
Par exemple rpad(col, max(length(col)) over(), '0'