我想要帮助订购专栏(父母),如编号4.1 - > 4.2 - > 4.9 - > 4.10
ColA ColB Parent(varchar(max))
1
1.1
1.22
2
2.1
3
3.1
3.1.1
3.1.2.1
3.1.2.12
4.4
4.4.1
4.4.10
4.4.11
4.4.2
4.4.3
选择colA,colB,Parent 来自myTable 按父母排序
答案 0 :(得分:4)
请尝试这个简单的解决方案 -
CREATE TABLE sorts
(
Parent varchar(max)
)
GO
INSERT INTO sorts VALUES
('1'),
('1.1'),
('1.22'),
('2'),
('2.1'),
('3'),
('3.1'),
('3.1.1'),
('3.1.2.1'),
('3.1.2.12'),
('4.4'),
('4.4.1'),
('4.4.10'),
('4.4.11'),
('4.4.2'),
('4.4.3')
GO
SELECT Parent FROM sorts
ORDER BY CAST('/'+REPLACE(Parent,'.','/')+'/' AS HIERARCHYID)
输出
Parent
-------------------
1
1.1
1.22
2
2.1
3
3.1
3.1.1
3.1.2.1
3.1.2.12
4.4
4.4.1
4.4.2
4.4.3
4.4.10
4.4.11
(16 rows affected)
从这里阅读更多内容 - https://msbiskills.com/2015/10/12/sql-puzzle-sort-data-by-version-puzzle/
答案 1 :(得分:0)
只是为了好玩,这是另一种选择。请注意,如果深度超过4,则无效。
我使用的是Pawan Kumar发布的相同表格。我针对更大的数据集(180万行)运行此操作,两者的性能保持不变。即使执行计划是相同的,我发现相当令人惊讶。
select Parent
from sorts
order by PARSENAME(Reverse(Parent), 1)
, PARSENAME(Reverse(Parent), 2)
, PARSENAME(Reverse(Parent), 3)
, PARSENAME(Reverse(Parent), 4)