Я пытаюсь создать запрос на основе иерархической таблицы родительских / дочерних элементов. IE, у меня есть parentID, а у него childID. Однако этот ChildID также может быть родительским и вниз по дереву go. Однако цель - получить столбец, представляющий структуру в виде чисел. Например:
1
1.1
1.1.1
1.1.2
1.1.3
1.2
У меня здесь образец структуры таблицы SQL Fiddle
CREATE TABLE [dbo].[_test](
[ParentItemSpecID] [int] NULL,
[ChildItemSpecID] [int] NULL,
[TotalQtyPerRoot] [float] NULL,
[level] [float] NULL,
[TreeSort] [int] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (1, 2, 1, 1, 0)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (2, 3, 1, 2, 1)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 4, 1, 3, 2)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (4, 5, 1, 4, 3)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (5, 6, 1, 5, 4)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (6, 7, 1, 6, 5)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (6, 8, 1, 6, 6)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (6, 9, 2, 6, 7)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (6, 10, 1, 6, 8)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (6, 11, 1, 6, 9)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (6, 12, 1, 6, 10)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (5, 13, 1, 5, 11)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (4, 14, 1, 4, 12)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 15, 1, 3, 13)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 16, 2, 3, 14)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 17, 1, 3, 15)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 18, 7, 3, 16)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 19, 2, 3, 17)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 20, 2, 3, 18)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 21, 2, 3, 19)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 22, 1, 3, 20)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 23, 1, 3, 21)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 24, 24, 3, 22)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 25, 24, 3, 23)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 26, 24, 3, 24)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 27, 2, 3, 25)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (27, 28, 4, 4, 26)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (27, 29, 2, 4, 27)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (27, 30, 4, 4, 28)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (27, 31, 2, 4, 29)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (27, 32, 2, 4, 30)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (27, 33, 2, 4, 31)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (27, 34, 2, 4, 32)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (27, 35, 2, 4, 33)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (27, 36, 4, 4, 34)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (27, 37, 2, 4, 35)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (27, 38, 0.04, 4, 36)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 39, 4, 3, 37)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 40, 1, 3, 38)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 41, 1, 3, 39)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 42, 1, 3, 40)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 43, 2, 3, 41)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (3, 44, 1, 3, 42)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (44, 45, 1, 4, 43)
GO
INSERT [dbo].[_test] ([ParentItemSpecID], [ChildItemSpecID], [TotalQtyPerRoot], [level], [TreeSort]) VALUES (45, 46, 1, 5, 44)
GO
Если вы ссылаетесь на Parent ID 3, ChildID 27. На этом этапе нумерация должна выглядят как 1.1.14, а затем начинаются с go до 1.1.14.1, 1.1.14.2, 1.1.14.3
Я пробовал несколько рангов, row_number (), Dense_rank ... Я просто не могу понять это то, что каждый раз, когда он переходит на новый уровень (уровень +1), он должен принимать значение предыдущей строки и снова начинать отсчет. Любая помощь будет оценена. Я стараюсь избегать использования al oop или курсора. Спасибо.