











-- 定义参数(实际使用时,需为 @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
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。