-- 库存查询需求量与需求量明细一致性排查;修改人:Ld 修改时间:2026-07-24 08:00:00; SET NOCOUNT ON; ;WITH 组件订单 AS ( SELECT c.组件流水号,o.订单编号,c.是否分配,o.订单类型,o.是否提交,p.是否启用,ISNULL(k.简称,'') AS 简称 FROM dbo.PDM_组件名称 c INNER JOIN dbo.PDM_机床名称 m ON c.机床流水号=m.机床流水号 INNER JOIN dbo.PDM_项目名称 p ON m.项目流水号=p.项目流水号 INNER JOIN dbo.合同管理_订单信息_基础表 o ON p.项目流水号=o.项目流水号 LEFT JOIN dbo.客户关系管理系统_客户名称 k ON p.客户流水号=k.客户流水号 ), 需求明细 AS ( SELECT co.订单编号,b.组件流水号,b.物料流水号,SUM(ISNULL(b.零件数量,0)) AS 需求量,N'生产订单需求' AS 来源 FROM dbo.PDM_零件明细表_基本件 b INNER JOIN 组件订单 co ON b.组件流水号=co.组件流水号 WHERE co.是否分配=1 AND co.订单类型<>3 AND NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,b.组件流水号,b.物料流水号 UNION ALL SELECT co.订单编号,s.组件流水号,s.物料流水号,SUM(ISNULL(s.零件数量,0)) AS 需求量,N'生产订单需求' AS 来源 FROM dbo.PDM_零件明细表_标准件和外购件 s INNER JOIN 组件订单 co ON s.组件流水号=co.组件流水号 WHERE co.是否分配=1 AND co.订单类型<>3 AND NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,s.组件流水号,s.物料流水号 UNION ALL SELECT co.订单编号,t.组件流水号,t.物料流水号,SUM(ISNULL(t.实领数,0)) AS 需求量,N'临时领料需求' AS 来源 FROM dbo.车间装配管理_装配执行_临时领料明细 t LEFT JOIN 组件订单 co ON t.组件流水号=co.组件流水号 WHERE t.物料流水号 IS NOT NULL AND NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,t.组件流水号,t.物料流水号 ), 已领明细 AS ( SELECT co.订单编号,b.组件流水号,b.物料流水号,SUM(ISNULL(l.已领数量,0)) AS 已领数 FROM dbo.车间装配管理_领料单明细 l INNER JOIN dbo.PDM_零件明细表_基本件 b ON l.基本件流水号=b.基本件流水号 INNER JOIN 组件订单 co ON b.组件流水号=co.组件流水号 WHERE NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,b.组件流水号,b.物料流水号 UNION ALL SELECT co.订单编号,s.组件流水号,s.物料流水号,SUM(ISNULL(l.已领数量,0)) AS 已领数 FROM dbo.车间装配管理_领料单明细 l INNER JOIN dbo.PDM_零件明细表_标准件和外购件 s ON l.标准件和外购件流水号=s.标准件和外购件流水号 INNER JOIN 组件订单 co ON s.组件流水号=co.组件流水号 WHERE NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,s.组件流水号,s.物料流水号 UNION ALL SELECT co.订单编号,l.组件流水号,l.物料流水号,SUM(ISNULL(l.已领数量,0)) AS 已领数 FROM dbo.车间装配管理_领料单明细 l LEFT JOIN 组件订单 co ON l.组件流水号=co.组件流水号 WHERE l.物料流水号 IS NOT NULL AND ISNULL(l.物料流水号,0)<>0 AND ISNULL(l.基本件流水号,0)=0 AND ISNULL(l.标准件和外购件流水号,0)=0 AND NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,l.组件流水号,l.物料流水号 ), 已领汇总 AS ( SELECT 订单编号,组件流水号,物料流水号,SUM(已领数) AS 已领数 FROM 已领明细 GROUP BY 订单编号,组件流水号,物料流水号 ), 明细 AS ( SELECT d.订单编号,d.组件流水号,d.物料流水号,d.需求量,ISNULL(l.已领数,0) AS 已领数, CASE WHEN d.需求量>ISNULL(l.已领数,0) THEN d.需求量-ISNULL(l.已领数,0) ELSE 0 END AS 最终需求量,d.来源 FROM 需求明细 d LEFT JOIN 已领汇总 l ON d.物料流水号=l.物料流水号 AND d.组件流水号=l.组件流水号 AND ISNULL(d.订单编号,'')=ISNULL(l.订单编号,'') ), 明细汇总 AS ( SELECT 物料流水号,SUM(最终需求量) AS 明细最终需求量 FROM 明细 WHERE 最终需求量<>0 GROUP BY 物料流水号 ) SELECT COUNT(*) AS 明细有需求物料数,SUM(明细最终需求量) AS 明细最终需求量合计 FROM 明细汇总; ;WITH 组件订单 AS ( SELECT c.组件流水号,o.订单编号,c.是否分配,o.订单类型,o.是否提交,p.是否启用 FROM dbo.PDM_组件名称 c INNER JOIN dbo.PDM_机床名称 m ON c.机床流水号=m.机床流水号 INNER JOIN dbo.PDM_项目名称 p ON m.项目流水号=p.项目流水号 INNER JOIN dbo.合同管理_订单信息_基础表 o ON p.项目流水号=o.项目流水号 ), 需求明细 AS ( SELECT co.订单编号,b.组件流水号,b.物料流水号,SUM(ISNULL(b.零件数量,0)) AS 需求量 FROM dbo.PDM_零件明细表_基本件 b INNER JOIN 组件订单 co ON b.组件流水号=co.组件流水号 WHERE co.是否分配=1 AND co.订单类型<>3 AND NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,b.组件流水号,b.物料流水号 UNION ALL SELECT co.订单编号,s.组件流水号,s.物料流水号,SUM(ISNULL(s.零件数量,0)) AS 需求量 FROM dbo.PDM_零件明细表_标准件和外购件 s INNER JOIN 组件订单 co ON s.组件流水号=co.组件流水号 WHERE co.是否分配=1 AND co.订单类型<>3 AND NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,s.组件流水号,s.物料流水号 UNION ALL SELECT co.订单编号,t.组件流水号,t.物料流水号,SUM(ISNULL(t.实领数,0)) AS 需求量 FROM dbo.车间装配管理_装配执行_临时领料明细 t LEFT JOIN 组件订单 co ON t.组件流水号=co.组件流水号 WHERE t.物料流水号 IS NOT NULL AND NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,t.组件流水号,t.物料流水号 ), 已领明细 AS ( SELECT co.订单编号,b.组件流水号,b.物料流水号,SUM(ISNULL(l.已领数量,0)) AS 已领数 FROM dbo.车间装配管理_领料单明细 l INNER JOIN dbo.PDM_零件明细表_基本件 b ON l.基本件流水号=b.基本件流水号 INNER JOIN 组件订单 co ON b.组件流水号=co.组件流水号 WHERE NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,b.组件流水号,b.物料流水号 UNION ALL SELECT co.订单编号,s.组件流水号,s.物料流水号,SUM(ISNULL(l.已领数量,0)) AS 已领数 FROM dbo.车间装配管理_领料单明细 l INNER JOIN dbo.PDM_零件明细表_标准件和外购件 s ON l.标准件和外购件流水号=s.标准件和外购件流水号 INNER JOIN 组件订单 co ON s.组件流水号=co.组件流水号 WHERE NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,s.组件流水号,s.物料流水号 UNION ALL SELECT co.订单编号,l.组件流水号,l.物料流水号,SUM(ISNULL(l.已领数量,0)) AS 已领数 FROM dbo.车间装配管理_领料单明细 l LEFT JOIN 组件订单 co ON l.组件流水号=co.组件流水号 WHERE l.物料流水号 IS NOT NULL AND ISNULL(l.物料流水号,0)<>0 AND ISNULL(l.基本件流水号,0)=0 AND ISNULL(l.标准件和外购件流水号,0)=0 AND NOT (ISNULL(co.是否提交,0)=6 AND ISNULL(co.是否启用,0)=1) GROUP BY co.订单编号,l.组件流水号,l.物料流水号 ), 已领汇总 AS ( SELECT 订单编号,组件流水号,物料流水号,SUM(已领数) AS 已领数 FROM 已领明细 GROUP BY 订单编号,组件流水号,物料流水号 ), 明细 AS ( SELECT d.订单编号,d.组件流水号,d.物料流水号, CASE WHEN d.需求量>ISNULL(l.已领数,0) THEN d.需求量-ISNULL(l.已领数,0) ELSE 0 END AS 最终需求量 FROM 需求明细 d LEFT JOIN 已领汇总 l ON d.物料流水号=l.物料流水号 AND d.组件流水号=l.组件流水号 AND ISNULL(d.订单编号,'')=ISNULL(l.订单编号,'') ), 明细汇总 AS ( SELECT 物料流水号,SUM(最终需求量) AS 明细最终需求量 FROM 明细 WHERE 最终需求量<>0 GROUP BY 物料流水号 ) SELECT COUNT(*) AS 明细与需求视图不一致物料数,SUM(ISNULL(m.明细最终需求量,0)) AS 明细合计,SUM(ISNULL(v.需求量,0)) AS 视图合计,SUM(ISNULL(m.明细最终需求量,0)-ISNULL(v.需求量,0)) AS 差异合计 FROM 明细汇总 m FULL JOIN dbo.物料管理_需求量_视图 v ON m.物料流水号=v.物料流水号 WHERE ISNULL(m.明细最终需求量,0)<>ISNULL(v.需求量,0);