층의 형식이 어떻게 되는지에 따라 달라질 것 같네요.
with t as ( select 'CB1-1' v1 from dual union all select 'CB1-2' v1 from dual union all select 'CB2-10' v1 from dual union all select 'CB2-2' v1 from dual union all select 'CB2-5' v1 from dual union all select 'CB3-5' v1 from dual ) select v1 from t order by substr(v1,3,1), cast(regexp_replace(v1,'CB[1-9]-','') as int)