首页 > 解决方案 > SQL 中的递归 CTE 以替换物料清单中的虚拟构建

问题描述

我已经建立了一个递归 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 来替换所有幻象,但我对递归相当陌生。

我在谷歌文档中列出了当前状态、幻像列表示例和未来状态的链接,任何帮助将不胜感激!

https://docs.google.com/spreadsheets/d/1ju0p1TWJcTksl4wL-btRfHmwQ5TV6a_m7wencFFAngw/edit?usp=sharing

标签: sqlsql-servercommon-table-expressionrecursive-query

解决方案


推荐阅读