144 lines
8.7 KiB
SQL
144 lines
8.7 KiB
SQL
-- 库存查询需求量与需求量明细一致性排查;修改人: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);
|