Alter VIEW View_HJGL_InstallData AS WITH TwOutPutData as (select distinct twRelation.PipelineId, outdetail.Id as TwOutputDetailId, twRelation.MaterialCode, master.Id as OutputMasterId from Tw_OutputMaster master join Tw_OutputDetail outdetail on outdetail.OutputMasterId = master.Id join Tw_InOutPlanMaster planmaster on planmaster.Id = master.InOutPlanMasterId join Tw_InOutPlanDetail_Relation twRelation on twRelation.InOutPlanMasterId = planmaster.Id and outdetail.MaterialCode = twRelation.MaterialCode where master.TypeInt=70), PrefabricatedData AS (SELECT pipe.PipeLineMatId as Id, line.PipelineCode, pipe.PrefabricatedComponents as Code, '预制组件' as TypeStr, '' as Matdef, CAST(NULL AS DECIMAL(18, 2)) as Number, -- 明确指定数据类型 pack.PackagingCode, trainnumber.TrainNumber, line.FlowingSection, line.UnitWorkId, line.ProjectId, pack.StackingPosition FROM dbo.HJGL_PipeLineMat pipe INNER JOIN dbo.HJGL_Pipeline line -- 改为INNER JOIN,如果管道必须存在 ON pipe.PipelineId = line.PipelineId LEFT JOIN dbo.HJGL_MaterialCodeLib lib ON lib.MaterialCode = pipe.MaterialCode LEFT JOIN HJGL_Pipeline_Component comonent ON comonent.PipelineComponentCode = pipe.PrefabricatedComponents LEFT JOIN HJGL_PackagingManageDetail packdetail ON packdetail.PipelineComponentId = comonent.PipelineComponentId LEFT JOIN HJGL_PackagingManage pack ON packdetail.PackagingManageId = pack.PackagingManageId AND pack.ProjectId = line.ProjectId -- 添加项目关联条件 LEFT JOIN HJGL_TrainNumberManage trainnumber ON pack.TrainNumberId = trainnumber.Id WHERE line.PipeArea = '1' and (pipe.PrefabricatedComponents != '' AND pipe.PrefabricatedComponents IS NOT NULL)), LooseComponentsData AS (SELECT distinct pipe.PipeLineMatId as Id, line.PipelineCode, pipe.MaterialCode as Code, '预制散件' as TypeStr, lib.MaterialDef as Matdef, cast( packdetail.Number as DECIMAL(18, 2)) as Number, pack.PackagingCode, trainnumber.TrainNumber, line.FlowingSection, line.UnitWorkId, line.ProjectId, pack.StackingPosition FROM dbo.HJGL_PipeLineMat pipe INNER JOIN HJGL_Pipeline line -- 改为INNER JOIN ON pipe.PipelineId = line.PipelineId LEFT JOIN dbo.HJGL_MaterialCodeLib lib ON lib.MaterialCode = pipe.MaterialCode LEFT JOIN HJGL_PackagingManageDetail packdetail ON packdetail.MaterialCode = pipe.MaterialCode LEFT JOIN TwOutPutData twOutPutData ON twOutPutData.PipelineId = pipe.PipelineId and twOutPutData.MaterialCode = packdetail.MaterialCode LEFT JOIN HJGL_PackagingManage pack ON packdetail.PackagingManageId = pack.PackagingManageId AND pack.ProjectId = line.ProjectId -- 添加项目关联条件 LEFT JOIN HJGL_TrainNumberManage trainnumber ON pack.TrainNumberId = trainnumber.Id where line.PipeArea = '1' and (pipe.PrefabricatedComponents is null or pipe.PrefabricatedComponents = '')) -- 合并结果 SELECT * FROM PrefabricatedData UNION ALL SELECT * FROM LooseComponentsData go INSERT INTO HJGL_PackagingManageDetail SELECT NEWID(), p.PackagingManageId, HPC.PipelineId, s.Value, NULL, NULL, '2025-10-29 15:01:32.513', 'C4A62EC0-E5D3-4EBF-A5FA-E56AA89633C0', NULL FROM HJGL_PackagingManage p CROSS APPLY dbo.SplitString(p.PipelineComponentId, ',', 1) s JOIN HJGL_Pipeline_Component HPC ON s.Value = HPC.PipelineComponentId WHERE p.PipelineComponentId IS NOT NULL AND p.PipelineComponentId != '' AND NOT EXISTS ( SELECT 1 FROM HJGL_PackagingManageDetail pmd WHERE pmd.PackagingManageId = p.PackagingManageId AND pmd.PipelineId = HPC.PipelineId AND pmd.PipelineComponentId = s.Value -- 如果还有其他判断重复的字段,可以继续添加条件 )