У меня есть этот оригинальный стол:преобразования таблицы иерархии в мост
IF OBJECT_ID('tempdb..#Hierarchies') IS NOT NULL DROP TABLE #Hierarchies
CREATE TABLE #Hierarchies
(
[HierarchyId] [INT] NOT NULL ,
[HierarchyName] NVARCHAR(MAX),
[ParentHierarchyId] [INT]
CONSTRAINT [PK_Hierarchies]
PRIMARY KEY CLUSTERED ([HierarchyId] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
)
ON [PRIMARY]
INSERT INTO #Hierarchies ([HierarchyId], [HierarchyName], [ParentHierarchyId])
SELECT 1 , 'A', NULL
UNION ALL
SELECT 2 , 'B', 1
UNION ALL
SELECT 3 , 'C', 1
UNION ALL
SELECT 4 , 'D', 2
SELECT * FROM #Hierarchies
SELECT
b.HierarchyId,
a.HierarchyId
FROM #Hierarchies a
CROSS JOIN
#Hierarchies b
ORDER BY b.HierarchyId
и хотел бы преобразовать его в этот формат:
ParentId ChildId LevelsRemoved
1 1 0
1 2 1
1 3 1
1 4 2
2 2 0
2 4 1
3 3 0
Перед тем, как попытаться реализовать колесо, я задавался вопросом, если кто-то может быть таким добрым и указать мне на существующий sql-скрипт для этого? Благодарю.
Что означает LevelsRemoved Column? –
Ваш желаемый результат не совсем ясен для меня. Что ты пытаешься сделать? Вы когда-нибудь рассматривали использование вложенных наборов вместо этого типа списка смежности? С ними гораздо легче работать. –
Да, я использовал этот и рекурсивный CTE, но мне нужен он в этом формате (так называемый шаблон моста в мире мер). – cs0815