Сортировка значений

сортировка
Дата: 03.06.2011 16:18:00
Есть следующая таблица

create table #t (r varchar(255))
insert into #t values ('A Z 4 5 1')
insert into #t values ('A Z 4 5 2')
insert into #t values ('A Z 4 5 3')
insert into #t values ('A Z 4 5 10')
insert into #t values ('A Z 4 5 24')
insert into #t values ('A Z 9 5')
insert into #t values ('A Z 5 7 1')
insert into #t values ('A Z 4 11')
insert into #t values ('A Z 5')
insert into #t values ('A A 5')
insert into #t values ('A Z 4 5 24 10')

A A 5
A Z 4 5 1
A Z 4 5 2
A Z 4 5 3
A Z 4 5 10
A Z 4 5 24
A Z 4 5 24 10
A Z 4 11
A Z 5
A Z 5 7 1
A Z 9 5


Количество вложений может быть неограниченно.
В данном примере кол-во вложенностей равно 4.

Как написать SELECT чтобы правильно отсортировал данные?
kDnZP
Дата: 03.06.2011 16:25:00
сортировка, три варианта на выбор:
1. разложить по полям, цифери преобразовать в нечто буквенное, сложить обратно - сортировать по полученному.
2. Хранить служебное поле для сортировки, формировать его при вставке/модификации
3. найти того, кто придумал сию архитектуру и подвесить вниз головой, но не за ноги - пусть думает, как сортировать))).
Ken@t
Дата: 03.06.2011 16:25:30
сортировка,

ORDER BY r COLLATE Latin1_General_BIN
Ken@t
Дата: 03.06.2011 16:27:15
Ken@t
сортировка,

ORDER BY r COLLATE Latin1_General_BIN

лажа
iap
Дата: 03.06.2011 16:32:21
Ken@t
сортировка,

ORDER BY r COLLATE Latin1_General_BIN
Так ведь "числа" в строке имеют разное количество разрядов.
Десятки (в числе 24, например) сравнивать с единицами (в числах 1 или 3) можно с любым COLLATION.
А толку-то?
s.w.a.n.
Дата: 03.06.2011 16:36:26
сортировка,
Количество вложений может быть неограниченно.
r varchar(255)
?
макс кол-во вложений = 128
kDnZP
Дата: 03.06.2011 16:38:49
сортировка, вот один из вариантов:

SELECT t.r FROM (
SELECT t2.r, (
SELECT  RIGHT('00000' + t1.rr, 5) [data()]
FROM    ( SELECT    t.r,
                    CAST('<r><c>' + REPLACE(t.r, ' ', '</c><c>') + '</c></r>' AS XML) s
          FROM      #t t
        ) t
CROSS APPLY ( SELECT    x.z.value('.', 'varchar(max)') rr
              FROM      s.nodes('/r/c') x ( z )
            ) t1
WHERE t.r=t2.r
FOR     XML PATH('') ) sort
FROM #t t2
) t
ORDER BY t.sort
s.w.a.n.
Дата: 03.06.2011 16:48:56
kDnZP
вот один из вариантов:
о, возьму на заметку!)... всё никак не освою эти XML...
сортировка
Дата: 03.06.2011 17:05:46
Спасибо! Работает вариант :)
Есть какие-то варианты без использования XML?
сортировка
Дата: 03.06.2011 17:07:02
SELECT  RIGHT('00000' + t1.rr, 5) [data()]

Зачем добавляются нолики?