การเรียงลำดับคอลัมน์ Oracle Alpha-Numeric
ฉันกำลังดำเนินการจัดเรียงคอลัมน์การแก้ไขของตาราง Oracle DB ตามลำดับ asc ตามด้านล่าง ในตอนแรกการแก้ไขตัวเลขจะถูกจัดเรียง (1,2,3, ... ) หลังจากนั้นจะเรียงลำดับอัลฟา - ตัวเลขดังต่อไปนี้: A, B, B1, C, C1, C2, …, Y, Y2, Y3, Z, AA, AB, .. , DA, … ZZ ฯลฯ Row_Number () ใน คำสั่ง SELECT ที่จะเติมด้วย 1,2,3 …สำหรับแต่ละเอกสาร # (ABC, XYZ) หลังจากการเรียงลำดับการแก้ไข
ดูรูปภาพที่อัปโหลดสำหรับตารางที่ต้องการ
ฉันลองใช้ SUBSTR, สั่งซื้อโดย ฯลฯ แต่ล้มเหลวในการจัดเรียงตามข้อกำหนดข้างต้น มีใครช่วยฉันได้ไหม ขอบคุณ!

คำตอบ
ตามที่ฉันเข้าใจคำถามของคุณคุณต้องการแก้ไขล่าสุดที่มีเพียงสองอักขระและไม่มีตัวเลข
คุณสามารถใช้การจัดเรียงตามเงื่อนไข:
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
นิพจน์ทั่วไปอธิบายสตริงที่เริ่มต้นด้วยอักขระที่เป็นตัวเลขและตัวอักษรตามด้วยตัวเลข: การแก้ไขเหล่านี้ควรมาก่อน การสาธิต 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 # | การแก้ไข | 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
มีวิธีการเก่าที่รู้จักกันดีคือ rpad (col, max-length, '0')
ตัวอย่างเช่น rpad (col, max (length (col)) over (), '0'