SQL中的递归CTE替换了物料清单中的幻影构建

时间:2019-05-14 23:26:18

标签: sql sql-server common-table-expression recursive-query

我建立了一个递归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

0 个答案:

没有答案