Я построил рекурсивный CTE, чтобы взорвать мой список материалов, но во многих элементах есть «фантомные» части в списке материалов.Мне нужно заменить «фантомные» предметы их ведомостью материалов.Призрачные предметы - это не настоящие предметы, а способ, которым мы группируем набор предметов.Некоторые фантомные предметы также построены с другими фантомными предметами, поэтому он должен быть рекурсивным.
Я пытался просто заменить фантомные элементы соединением с самой таблицей, но столкнулся с проблемами, когда есть фантомные элементы, состоящие из других фантомных элементов
SELECT
c.TopLevelItem,
c.ItemPath,
c.ParentItem,
ComponentItem = x.ComponentItem,
ComponentQuantity = x.ComponentQuantity,
c.ComponentItemLevel
FROM KOG_Datamart.dim.CurrentProductStructure c
LEFT JOIN
(
SELECT
ParentItem,
ComponentItem,
ComponentQuantity
FROM KOG_Datamart.dim.CurrentProductStructure
JOIN dim.Items i
ON TopLevelItem = i.ItemNumber
WHERE
i.ItemClass = 'phantom'
AND ParentItem <> ComponentItem
GROUP BY
ParentItem,
ComponentItem,
ComponentQuantity
) x
ON x.ParentItem = c.ParentItem
WHERE
x.ParentItem IS NOT NULL
AND c.ParentItem <> c.ComponentItem
ПосколькуПриведенный выше код будет дублировать элементы с несколькими фантомами, я думаю, что мне нужно будет использовать рекурсивный cte для замены всех фантомов, но я довольно новичок в рекурсии.
Я перечислил ссылку ниже текущего состояния, примерсписок фантомных предметов и будущее состояние в документе Google, любая помощь будет оценена!
https://docs.google.com/spreadsheets/d/1ju0p1TWJcTksl4wL-btRfHmwQ5TV6a_m7wencFFAngw/edit?usp=sharing