RSS订阅王佳明的个人网站
你现在的位置:首页 / 技术 / 正文

用GPT写BOM树

0 技术 | 2024年6月28日

问:

SELECT T0.[Code] FATHER, T1.[Code], T1.[Quantity]/T0.[Qauntity] Quantity 
FROM OITT T0  INNER JOIN ITT1 T1 ON T0.Code = T1.Father 
WHERE T0.[Code] ='M06003800000000'

不要修改上述代码

把bom按照father展开

加一列 qty ,他的值是各级Quantity相乘

初始部分和递归部分的列类型必须完全匹配。强制类型转换确保列类型一致。


GPT:

要按照给定的SQL查询展开BOM并计算每个组件的总数量,你可以使用递归CTE(Common Table Expression)来实现。下面是一个示例SQL查询,假设你的表结构和数据可以支持递归查询:

WITH RecursiveBOM AS (
    -- 初始部分:选择顶层组件的代码、代码、数量,并初始化递归
    SELECT 
        T0.[Code] AS Father,
        T1.[Code],
        T1.[Quantity],
        CAST(T1.[Quantity] AS DECIMAL(18,4)) AS Qty
    FROM 
        OITT T0
    INNER JOIN 
        ITT1 T1 ON T0.Code = T1.Father
    WHERE 
        T0.[Code] = 'M06003800000000'
    
    UNION ALL
    
    -- 递归部分:连接父组件和子组件,计算数量的乘积
    SELECT 
        rb.Father,
        t1.[Code],
        t1.[Quantity],
        CAST(rb.Qty * t1.Quantity AS DECIMAL(18,4)) AS Qty
    FROM 
        RecursiveBOM rb
    INNER JOIN 
        ITT1 t1 ON rb.Code = t1.Father
)
-- 最终选择递归结果集
SELECT 
    Father,
    Code,
    Qty AS Quantity
FROM 
    RecursiveBOM
ORDER BY 
    Father, Code;

这个查询的关键点包括:

使用递归CTE RecursiveBOM 来展开BOM。在初始部分,选择顶层组件的代码、代码、数量,并初始化递归。在递归部分,连接父组件和子组件,计算数量的乘积,并继续递归下去直到没有更多的子组件为止。

强制类型转换确保所有列的类型匹配,这在SQL Server中是很重要的,特别是涉及到数值计算时。

最后,选择递归结果集,并按照Father和Code排序以便清晰展示BOM的结构。

请注意,具体的数据类型转换和精度取决于你的实际需求和数据库的支持。


问:如果某一行数据有下一级,就把上一级删除

GPT:理解你的需求,如果某一行数据有下一级(子组件),则删除该行的上一级数据。这可以通过调整递归查询的方式来实现,确保只选择最底层的组件数据。以下是修改后的SQL查询:

WITH RecursiveBOM AS (
    -- 初始部分:选择顶层组件的代码、代码、数量,并初始化递归
    SELECT 
        T0.[Code] AS Father,
        T1.[Code],
        T1.[Quantity],
        CAST(T1.[Quantity] AS DECIMAL(18,4)) AS Qty,
        1 AS Level -- 初始级别为1
    FROM 
        OITT T0
    INNER JOIN 
        ITT1 T1 ON T0.Code = T1.Father
    WHERE 
        T0.[Code] = 'M06003800000000'
    
    UNION ALL
    
    -- 递归部分:连接父组件和子组件,计算数量的乘积
    SELECT 
        rb.Father,
        t1.[Code],
        t1.[Quantity],
        CAST(rb.Qty * t1.Quantity AS DECIMAL(18,4)) AS Qty,
        rb.Level + 1 -- 级别加1
    FROM 
        RecursiveBOM rb
    INNER JOIN 
        ITT1 t1 ON rb.Code = t1.Father
)
-- 最终选择递归结果集,只保留最底层的子组件数据
SELECT 
    rb.Father,
    rb.Code,
    rb.Qty AS Quantity
FROM 
    RecursiveBOM rb
WHERE 
    NOT EXISTS (
        -- 使用NOT EXISTS来排除有子组件的行
        SELECT 1
        FROM ITT1 t1
        WHERE t1.Father = rb.Code
    )
ORDER BY 
    rb.Father, rb.Code;

这个修改后的查询的关键点是:

在递归CTE RecursiveBOM 中添加一个 Level 列来跟踪每个组件在BOM中的级别。

在最终的查询中,使用 NOT EXISTS 子查询来排除那些有子组件的行,确保只选择最底层的子组件数据。

最后,按照Father和Code排序以展示清晰的BOM结构。

这样做可以确保每一行数据只保留最底层的子组件,删除了拥有子组件的上级数据。

推荐您阅读更多有关于“ GPT  BOM   ”的文章

以上内容如果对你有用,请收藏。
上一篇:把多个word文档合并起来下一篇:按电梯效应

猜你喜欢

评论列表:

官方LOGO
    佳明one

    我们的使命是减少资金、技术和
    教育方面的障碍,以提供有效的
    IT科技支援。。。。。。。。。

    5ubg


    扫码从手机访问


网站分类
友情链接