SELECT t0.FID --订单id ,t0.FBILLNO ,t2.FID 'FORECAST_ID' ,t2e.FENTRYID 'FORECASTENTRY_ID' ,t2.FBILLNO 'F_FORECASTNUMBER' ,t2e.FSEQ 'F_LINENUMBER' ,t2e.FCUSTID 'F_CUSTOMERNAME' ,t2e.FMATERIALID 'F_MATERIALCODE' --预测单物料id ,t2e.F_SOURCE_ORDER_LINE_NUMBER --销售订单行号 ,t2e.F_SOURCE_ORDER_NUMBER --销售订单单号# ,t0.F_REMARK INTO #TEMP_PLANORDER_ID_LIST FROM T_PLN_PLANORDER t0 INNER JOIN T_PLN_RESERVELINKENTRY t1e ON t1e.FINTSUPPLYID = t0.FID INNER JOIN T_PLN_RESERVELINK t1 ON t1.FID = t1e.FID INNER JOIN T_PLN_FORECASTENTRY t2e ON t2e.FENTRYID = t1.FSRCENTRYID INNER JOIN T_PLN_FORECAST t2 on t2.fid = t2e.FID WHERE 1 = 1 --AND t0.F_FORECASTNUMBER = '' AND CONVERT(nvarchar(100),t0.FCREATEDATE,23) = '2024-01-18' CREATE INDEX #TEMP_PLANORDER_ID_LIST_INDEX_FID ON #TEMP_PLANORDER_ID_LIST(FID); SELECT t0.FID --订单id ,t0.FBILLNO ,t0.FORECAST_ID ,t0.FORECASTENTRY_ID ,t0.F_FORECASTNUMBER ,t0.F_LINENUMBER ,t0.F_CUSTOMERNAME ,t0.F_MATERIALCODE --预测单物料id ,t0.F_SOURCE_ORDER_LINE_NUMBER --销售订单行号 ,t0.F_SOURCE_ORDER_NUMBER --销售订单单号# ,ISNULL(t1_l.FDESCRIPTION,'') AS F_DESCRIPTION --,t1_l.FDESCRIPTION F_DESCRIPTION ,ISNULL(t1e_l.FDESCRIPTION,'') AS F_REMARK --表体备注 --,t1e_l.FDESCRIPTION F_REMARK ,t2.FNUMBER 'MATERIAL_NUMBER' ,t2_l.FNAME 'MATERIAL_NAME' ,t3.TOTAL INTO #TEMP_PLANORDER_RESERVELINK FROM #TEMP_PLANORDER_ID_LIST t0 INNER JOIN (SELECT FID,COUNT(1) TOTAL FROM #TEMP_PLANORDER_ID_LIST GROUP BY FID ) t3 on t3.FID = t0.FID LEFT JOIN T_PLN_FORECAST_L t1_l on t0.FORECAST_ID = t1_l.FID AND t1_l.FLOCALEID = 2052 LEFT JOIN T_PLN_FORECASTENTRY_L t1e_l on t1e_l.FENTRYID = t0.FORECASTENTRY_ID AND t1e_l.FLOCALEID = 2052 LEFT JOIN T_BD_MATERIAL t2 on t0.F_MATERIALCODE = t2.FMATERIALID LEFT JOIN T_BD_MATERIAL_L t2_l on t0.F_MATERIALCODE = t2_l.FMATERIALID WHERE 1=1 --AND t0.F_FORECASTNUMBER = '' CREATE INDEX #TEMP_PLANORDER_RESERVELINK_INDEX ON #TEMP_PLANORDER_RESERVELINK(FID); ----计划订单更新 单一来源--- --UPDATE t0 --SET t0.F_FORECASTNUMBER = tt.F_FORECASTNUMBER -- ,t0.F_LINENUMBER = tt.F_LINENUMBER -- ,t0.F_CUSTOMERNAME = tt.F_CUSTOMERNAME -- ,t0.F_MATERIALCODE = tt.F_MATERIALCODE -- ,t0.F_REMARK = tt.F_REMARK -- ,t0.F_MATERIALCODESHOW = tt.MATERIAL_NUMBER -- ,t0.F_MATERIALNAMESHOW = tt.MATERIAL_NAME --FROM T_PLN_PLANORDER t0 -- INNER JOIN #TEMP_PLANORDER_RESERVELINK tt on t0.FID = tt.FID AND tt.TOTAL = 1 ----计划订单扩展更新 单一来源--- --UPDATE t0_l --SET t0_l.F_DESCRIPTION = tt.F_DESCRIPTION --FROM T_PLN_PLANORDER_L t0_l -- INNER JOIN #TEMP_PLANORDER_RESERVELINK tt on t0_l.FID = tt.FID AND tt.TOTAL = 1 SELECT t0.FID --订单id ,t0.FBILLNO ,t0.FORECAST_ID ,t0.FORECASTENTRY_ID ,t0.F_FORECASTNUMBER ,DENSE_RANK() over(partition BY t0.FID order by t0.FORECAST_ID) 'FORECASTNUMBER_SEQ' ,t0.F_LINENUMBER ,ROW_NUMBER() over(partition BY t0.FID,t0.FORECAST_ID order by t0.F_LINENUMBER) 'LINENUMBER_SEQ' ,t0.F_CUSTOMERNAME ,t0.F_MATERIALCODE --预测单物料id ,t0.F_SOURCE_ORDER_LINE_NUMBER --销售订单行号 ,t0.F_SOURCE_ORDER_NUMBER --销售订单单号# ,t0.F_REMARK ,t0.F_DESCRIPTION ,t0.MATERIAL_NUMBER ,t0.MATERIAL_NAME ,t0.TOTAL ,DENSE_RANK() over(partition BY t0.FID order by t0.F_MATERIALCODE) 'DENSE_RANK_NUM' INTO #TEMP_PLANORDER_RESERVELINK2 FROM #TEMP_PLANORDER_RESERVELINK t0 WHERE 1 = 1 AND TOTAL > 1 ORDER BY FID CREATE INDEX #TEMP_PLANORDER_RESERVELINK2_INDEX ON #TEMP_PLANORDER_RESERVELINK2(FID); UPDATE t0 SET t0.F_MATERIALCODE = 0,t0.F_CUSTOMERNAME = 0 FROM #TEMP_PLANORDER_RESERVELINK2 t0,(SELECT FID FROM #TEMP_PLANORDER_RESERVELINK2 WHERE DENSE_RANK_NUM = 2) t1 WHERE t0.FID = t1.FID SELECT t0.FID ,t0.FBILLNO ,t0.FORECAST_ID ,t0.F_FORECASTNUMBER ,t0.F_DESCRIPTION ,t0.F_MATERIALCODE ,t0.F_CUSTOMERNAME ,ISNULL(stuff((select ','+ CONVERT(nvarchar(100), tt.F_LINENUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_LINENUMBER' ,ISNULL(stuff((select distinct ';'+ ISNULL(tt.F_REMARK,'') from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_REMARK' ,ISNULL(stuff((select distinct ','+ tt.MATERIAL_NUMBER from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'MATERIAL_NUMBER' ,ISNULL(stuff((select distinct ','+ tt.MATERIAL_NAME from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'MATERIAL_NAME' ,ISNULL(stuff((select distinct ','+ CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_NUMBER' ,ISNULL(stuff((select distinct ','+ CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_LINE_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID and tt.FORECAST_ID = t0.FORECAST_ID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_LINE_NUMBER' INTO #TEMP FROM #TEMP_PLANORDER_RESERVELINK2 t0 GROUP BY t0.FID ,t0.FBILLNO ,t0.FORECAST_ID ,t0.F_FORECASTNUMBER ,t0.F_DESCRIPTION ,t0.F_MATERIALCODE ,t0.F_CUSTOMERNAME CREATE INDEX #TEMP_INDEX ON #TEMP(FID); SELECT t0.FID ,t0.FBILLNO ,t0.F_MATERIALCODE ,t0.F_CUSTOMERNAME ,ISNULL(stuff((select ';'+ CONVERT(nvarchar(100), tt.F_LINENUMBER) from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_LINENUMBER' ,ISNULL(stuff((select ';'+ CONVERT(nvarchar(100), tt.F_FORECASTNUMBER) from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_FORECASTNUMBER' ,ISNULL(stuff((select distinct ';' + tt.MATERIAL_NUMBER from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'MATERIAL_NUMBER' ,ISNULL(stuff((select distinct ';' + tt.MATERIAL_NAME from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'MATERIAL_NAME' ,ISNULL(stuff((select distinct ';' + tt.F_REMARK from #TEMP tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_REMARK' ,ISNULL(stuff((select distinct ';' + ISNULL(tt.F_DESCRIPTION,'') from #TEMP tt where tt.FID = t0.FID for xml path('')),1,1,''),'') 'F_DESCRIPTION' ,ISNULL(stuff((select distinct ';' + CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_NUMBER' ,ISNULL(stuff((select distinct ';' + CONVERT(nvarchar(100), tt.F_SOURCE_ORDER_LINE_NUMBER) from #TEMP_PLANORDER_RESERVELINK2 tt where tt.FID=t0.FID for xml path('')),1,1,''),'') 'F_SOURCE_ORDER_LINE_NUMBER' INTO #TEMP2 FROM #TEMP t0 --WHERE t0.fbillno ='MRP01679279' GROUP BY t0.FID ,t0.FBILLNO ,t0.F_MATERIALCODE ,t0.F_CUSTOMERNAME CREATE INDEX #TEMP2_INDEX ON #TEMP2(FID); --UPDATE #TEMP2 SET F_REMARK = '' WHERE F_REMARK = ';' ----计划订单更新-多来源-- --UPDATE t0 --SET t0.F_FORECASTNUMBER = tt.F_FORECASTNUMBER -- ,t0.F_LINENUMBER = tt.F_LINENUMBER -- ,t0.F_CUSTOMERNAME = tt.F_CUSTOMERNAME -- ,t0.F_MATERIALCODE = tt.F_MATERIALCODE -- ,t0.F_REMARK = tt.F_REMARK -- ,t0.F_MATERIALCODESHOW = tt.MATERIAL_NUMBER -- ,t0.F_MATERIALNAMESHOW = tt.MATERIAL_NAME --FROM T_PLN_PLANORDER t0 -- INNER JOIN #TEMP2 tt on t0.FID = tt.FID --AND tt.TOTAL = 1 ----计划订单扩展表更新-多来源-- --UPDATE t0_l --SET t0_l.F_DESCRIPTION = tt.F_DESCRIPTION --FROM T_PLN_PLANORDER_L t0_l -- INNER JOIN #TEMP2 tt on t0_l.FID = tt.FID --AND tt.TOTAL = 1 SELECT * FROM #TEMP2 DROP TABLE #TEMP DROP TABLE #TEMP2 DROP TABLE #TEMP_PLANORDER_ID_LIST DROP TABLE #TEMP_PLANORDER_RESERVELINK DROP TABLE #TEMP_PLANORDER_RESERVELINK2