Oracle Alfa Sayısal sütun sıralaması
Bir Oracle DB tablosunun Revizyon sütununu aşağıdaki gibi artan düzende sıralamak için çalışıyorum. İlk önce sıralanacak sayısal revizyonlar (1,2,3,…). Bundan sonra Alfa-Sayısal aşağıdaki gibi sıralanacaktır: A, B, B1, C, C1, C2,…, Y, Y2, Y3, Z, AA, AB, .., DA,… ZZ, vb. revizyon sıralandıktan sonra her belge numarası (ABC, XYZ) için 1,2,3… ile doldurulacak SELECT ifadesi.
Gerekli tablo için yüklenen resme bakın.
SUBSTR, Order by, vb. İle denedim, ancak yukarıdaki gereksinime göre sıralayamadım. Birisi bana bu konuda yardım edebilir mi? Teşekkürler!

Yanıtlar
Sorunuzu anladığım kadarıyla, yalnızca iki karakter içeren ve rakam içermeyen son düzeltmeleri yapmak istiyorsunuz.
Koşullu sıralama kullanabilirsiniz:
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
Normal ifade, alfasayısal bir karakterle başlayan ve isteğe bağlı olarak bir rakamla başlayan bir dizeyi açıklar: bu revizyonlar önce gelmelidir. DB Fiddle Demosu :
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 # | REVİZYON | 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
İyi bilinen eski bir yöntem vardır: rpad (col, max-length, '0')
Örneğin rpad (col, max (length (col)) over (), '0'