Хорошо, это решение уродливо, и не для слабонервных. Я не тестировал SQL CE, но он использует только базовый t-sql, так что все должно быть в порядке. Вам нужно будет создать таблицу подсчета (просто запустите его первый блок кода, если вы не хотите его читать. Он использует базу данных tempdb, так что вы захотите это изменить), и таблицу держать каждую букву алфавита (из-за отсутствия функций сопоставления с образцом). После создания таблицы подсчета (вам не нужно переходить к 11000, как показано в примере), запустите их, и вы увидите желаемое поведение сортировки
Создание таблицы алфавита (временная для демонстрационных целей):
select *
into #alphatable
from
(
select 'A' as alpha union all
select 'B' union all
select 'C' union all
select 'D'
--etc. etc.
) x
Создание таблицы дерева (временная для демонстрационных целей):
select *
into #tree
from
(
select 'aagew' as TreeNumber union all
select '3' union all
select 'bsfreww' union all
select '1' union all
select 'xcaswf'
) x
Решение:
select TreeNumber
from
(
select t.*, tr.*, substring(TreeNumber, case when N > len(TreeNumber) then len(TreeNumber) else N end, 1) as singleChar
from tally t
cross join #tree tr
where t.N < (select max(len(TreeNumber)) from #tree)
) z
left join
#alphatable a
on z.singlechar = a.alpha
group by TreeNumber
order by case when max(alpha) is not null then 0 else TreeNumber end
Это в основном техника, которую Моден описывает как «пошаговое прохождение символов», затем каждый символ объединяется в таблицу альфа. Строки без строки в альфа-таблице являются числовыми.