/* 这是一个用于筛选特定生产工单相关数据的SQL脚本,分为公共表表达式(CTE)和临时表创建两部分 */ -- 步骤1:定义公共表表达式(CTE)用于数据排序 WITH RankedData AS ( SELECT MO.ACTUAL_COMPLETE_DATE, -- 工单实际完成日期 MITEM.ITEM_CODE AS MItemCode, -- 主物料的编码(来自MO表关联的ITEM表) CITEM.ITEM_CODE AS CItemCode, -- 子物料的编码(来自MO_D表关联的ITEM表) MO_D.ISSUED_QTY AS 领料数, -- 物料发放数量 MO.COMPLETED_QTY AS 入库, -- 工单完成数量 -- 按物料组合的最新日期生成行号(用于后续筛选最近3条记录) ROW_NUMBER() OVER ( PARTITION BY MITEM.ITEM_CODE, CITEM.ITEM_CODE -- 按主/子物料组合分区 ORDER BY MO.ACTUAL_COMPLETE_DATE DESC -- 按完成日期倒序排列 ) AS RowNum FROM MO -- 主工单表 -- 关联主物料信息 JOIN ITEM MITEM ON MITEM.ITEM_BUSINESS_ID = MO.ITEM_ID -- 左联工单明细表(允许空值) LEFT JOIN MO_D ON MO.MO_ID = MO_D.MO_ID -- 关联子物料信息(必须存在) JOIN ITEM CITEM ON MO_D.ITEM_ID = CITEM.ITEM_BUSINESS_ID WHERE MO.ACTUAL_COMPLETE_DATE < @StartDate -- 筛选指定日期前的记录 and LEFT(CITEM.ITEM_CODE ,1) != '1' -- 排除子物料编码以1开头(返工工单) and LEFT(CITEM.ITEM_CODE ,1) != '3' -- 排除子物料编码以3开头(成型工单) and LEFT(CITEM.ITEM_CODE ,1) != '4' -- 排除子物料编码以4开头(成型工单) ) -- 步骤2:将筛选结果存入临时表 SELECT MItemCode, -- 主物料编码 CItemCode, -- 子物料编码 领料数, -- 发放数量 入库 -- 完成数量 INTO #temp -- 创建临时表存储结果 FROM RankedData WHERE RowNum <= 3 -- 取每个物料组合的最新3条记录 ORDER BY MItemCode -- 按主物料编码排序 /* 业务逻辑说明: 1. 该查询通过多层关联,获取主工单(MO)与子物料(MO_D)的关联关系 2. 通过ROW_NUMBER实现按日期倒序的Top3数据筛选 3. 过滤条件排除特定类型的生产工单: - 以1开头的编码:返工工单 - 以3/4开头的编码:成型工单 4. 最终结果用于分析近期物料发放与工单完成的对应关系 */
来源链接:https://www.cnblogs.com/1810739137qq/p/18797274
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容