我有一个存储自定义项目编号的sql表.这些中的每一个都可以让一个孩子从中分离出一个分隔符……每个人都可以有一个孩子.
它可能是一个例子(再次,动态,不知道它将是什么):
Item Number 1 1.1 1.1.1 1.1.1.1 1.1.1.1.a 1.1.1.1.b 10 11 2.1 2.10 2.2 2.20 20 3 30
使这一点变得艰难的是这些数字是在飞行中创建的,而不一定是有序的.您可以创建5个数字(1,2,3,4,5),然后创建一个1的子项,以便它不会按顺序存储在数据库中.
如何从表格中选择并按项目编号进行排序,以便在数据未按该顺序存储时如上所示正确显示?
我试过的大多数解决方案都给了我1,5 …… 1.1,1.2或1,1.1,1.1.1,10,11 …… 2,20 …… 3,30等
解决方法
如果您有sql 2008,则可以使用新的hierarchyid数据类型:
WITH Items (ItemNumber) AS ( SELECT '1' UNION ALL SELECT '1.1' UNION ALL SELECT '1.1.1' UNION ALL SELECT '10' UNION ALL SELECT '11' UNION ALL SELECT '2' UNION ALL SELECT '2.1' UNION ALL SELECT '20' UNION ALL SELECT '3' UNION ALL SELECT '30' ) SELECT * FROM Items ORDER BY Convert(hierarchyid,'/' + ItemNumber + '/');