Сортировка индекса нестабильной структуры в SQL Server - PullRequest
0 голосов
/ 17 мая 2019

Есть таблица Article.Я хочу отсортировать данные следующим образом.

Проверить записи 4.2.1.

Спасибо за четыре предложения и помощь.

Я хочу отсортировать эти данные:

ArticleCode        
------------
1
1.1
1.2
1.3
2
3
3.1
3.2
3.3
3.4
3.5
4
4.1
4.1.1
4.1.2
4.1.3
4.2
4.2.1
4.2.2
4.2.3
4.2.4
4.2.5
4.2.6
4.2.7
4.2.8
4.2.9
4.2.10
4.2.11
4.2.12

Мой запрос на выбор:

select ArticleCode 
from Article 
order by ArticleCode

Запросрезультат:

1
1.1
1.2
1.3
2
3
3.1
3.2
3.3
3.4
3.5
4
4.1
4.1.1
4.1.2
4.1.3
4.2
4.2.1
4.2.10
4.2.11
4.2.12
4.2.2
4.2.3
4.2.4
4.2.5
4.2.6
4.2.7
4.2.8
4.2.9

1 Ответ

3 голосов
/ 17 мая 2019

Вот один из способов сделать это.Он будет поддерживать разумную глубину (892 байта), но не бесконечную.Кроме того, это будет довольно медленно для большого набора данных, но не уверен, что вы можете избежать проблем с производительностью здесь с имеющейся структурой данных.

declare @article table(ArticleCode varchar(10))

insert @article values
('1')
, ('1.1')
, ('1.2')
, ('1.3')
, ('2')
, ('3')
, ('3.1')
, ('3.2')
, ('3.3')
, ('3.4')
, ('3.5')
, ('4')
, ('4.1')
, ('4.1.1')
, ('4.1.2')
, ('4.1.3')
, ('4.2')
, ('4.2.1')
, ('4.2.10')
, ('4.2.11')
, ('4.2.12')
, ('4.2.2')
, ('4.2.3')
, ('4.2.4')
, ('4.2.5')
, ('4.2.6')
, ('4.2.7')
, ('4.2.8')
, ('4.2.9')

select *
from @article
order by convert(hierarchyid, '/' + replace(ArticleCode, '.', '/') + '/') --have to append the / before and after so the values are a valid hierarchyid
...