惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
I
InfoQ
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog
博客园_首页
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
A
About on SuperTechFans
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
C
Check Point Blog
B
Blog RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Engineering at Meta
Engineering at Meta
B
Blog
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
F
Fortinet All Blogs
月光博客
月光博客
GbyAI
GbyAI

博客园 - AaronLi

E10——打印行序 E10——BOM展下阶CTE写法 E10——计算品号的使用情况(最近五年):连续X年在用 E10——在线建档,单头取单身行的数据 SQLSERVER——XML转数据表输出(E10的PickList转成数据表) SQLServer数据库日志太大收缩操作指南 泛微OA——修改数据库密码 泛微OA——建模-查询,链接字段跳转到流程的路径写法 SQLSERVER——PIVOT列转行 SQL——练习:上展BOM SQL——练习:往下展开BOM SQL——CHARINDEX,找到字符(char)的位置(index) Sqlserver 根据年月获取第一天和最后一天 EXCEL生成GUID 多种格式 E10——智能菜单 [转] 判断表(临时表),存储过程是否存在 E10——凭证报表序号按流水自然排序 E10——函数GetTimeDiff(DateTime dt1,DateTime dt2,int type) E10——GetEntityProperty方法 E10——脚本中GUID的值如何判断是否相等?
SQL&ERP——通过品号递归BOM往上找到最top的主件
AaronLi · 2025-08-08 · via 博客园 - AaronLi
-- 定义参数(实际使用时,需为 @PartNumber 赋值)
DECLARE @pITEM_CODE VARCHAR(30);
SET @pITEM_CODE = '390100014'; -- 示例值,替换为实际元件品号ID

WITH BomCTE
AS (
   -- Anchor成员:获取给定元件品号的直接父件(第一层主件)
   SELECT b.ITEM_ID AS Parent_ITEM_ID, -- 父件品号ID
          0 AS Level,
          d.SOURCE_ID_ROid Son_ITEM_ID
   FROM [BOM_D] d
       INNER JOIN [BOM] b
           ON d.BOM_ID = b.BOM_ID -- 关联BOM主件
       INNER JOIN dbo.ITEM AS i
           ON i.ITEM_BUSINESS_ID = d.SOURCE_ID_ROid
   WHERE i.ITEM_CODE = @pITEM_CODE -- 参数:元件品号ID

   UNION ALL

   -- 递归成员:向上遍历,查找当前父件的更上层父件
   SELECT b.ITEM_ID AS Parent_ITEM_ID, -- 更上层父件品号ID
          cte.Level + 1 AS Level,
          cte.Son_ITEM_ID
   FROM BomCTE cte
       INNER JOIN [BOM_D] d
           ON cte.Parent_ITEM_ID = d.SOURCE_ID_ROid -- 当前父件作为元件在更高层中
       INNER JOIN [BOM] b
           ON d.BOM_ID = b.BOM_ID -- 关联更高层的主件
   WHERE cte.Level <= 20 -- 安全限制,防止无限循环

)

-- 最终输出:所有在CTE中且没有更上层父件的顶层主件品号
SELECT DISTINCT
       c.Son_ITEM_ID,
       i2.ITEM_CODE Son_ITEM_CODE,
       i2.ITEM_NAME Son_ITEM_NAME,
       i.ITEM_BUSINESS_ID,
       i.ITEM_CODE, -- 顶层主件品号
       i.ITEM_NAME  -- 顶层主件品名
FROM BomCTE c
    INNER JOIN [ITEM] AS i
        ON c.Parent_ITEM_ID = i.ITEM_BUSINESS_ID -- 关联品号资料表获取品号信息
    INNER JOIN dbo.ITEM AS i2
        ON i2.ITEM_BUSINESS_ID = c.Son_ITEM_ID
WHERE NOT EXISTS
(
    SELECT 1 FROM [BOM_D] d2 WHERE d2.SOURCE_ID_ROid = c.Parent_ITEM_ID -- 检查Parent_ITEM_ID是否在其他BOM中作为元件(如果有,说明不是顶层)
)
ORDER BY i2.ITEM_CODE,
         i.ITEM_CODE