--生产中我们至少有一个订单表,一个生产进度表,如何将订单表与生产进度表合成一张表呢,以下是一个例子,这种方法可以在存储过程中实现,亦可放在客户端实现
CREATE PROCEDURE [dbo].[ProcessPlanForm]--加工进度计划安排表 @SQLQualification varchar(1000),@MaxJDsl int--SQL条件,最大进度数量asdeclare @mySQL varchar(8000)--SQL条件declare @Inpcolums varchar(1000)--被插入字段列表set @InpColums=''declare @Outcolums1 varchar(2000)--插入值1--序号set @OutColums1=''declare @Outcolums2 varchar(2000)--插入值2--计划开始set @OutColums2=''declare @Outcolums3 varchar(2000)--插入值3--计划日期set @OutColums3=''declare @Outcolums4 varchar(2000)--插入值4--接件日期set @OutColums4=''declare @Outcolums5 varchar(2000)--插入值5---完成日期set @OutColums5=''declare @OutConst varchar(200)--输出列表常量declare @Fildlist varchar(1000)--字段列表set @Fildlist=''set @OutConst='序号,客户,订单编号,品名,材质,成品尺寸,数量,预交期,'declare @xh intset @xh=1set @mysql='--创建临时表declare @mytemp table (MYID decimal(18,0) IDENTITY (1,1) NOT NULL,序号 varchar(11) NULL,客户 varchar(5) NULL,订单编号 varchar(30) NULL,品名 varchar(30) NULL , 材质 varchar(15) NULL,成品尺寸 varchar(18) NULL,数量 int NULL,预交期 datetime NULL ,工序 varchar(20) NULL'while @xh<=@MaxJDsl begin --修改表结构 if @FildList='' set @FildList=',工序'+convert(varchar(2),@xh) +' varchar(20) NULL' else set @FildList=@FildList+',工序'+convert(varchar(2),@xh) +' varchar(20) NULL' --set @mysql=@mysql+'alter table #mytemp add 工序'+convert(varchar(2),@xh)+' varchar(20) null'+char(13)--记录新增字段名列表 --第一次插入值--工序 if @OutColums1='' set @OutColums1='dbo.findscjdRecNo1(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh) else set @OutColums1=@OutColums1+',dbo.findscjdRecNo1(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh) --第二次插入值列表--计划开始 if @OutColums2='' set @OutColums2='dbo.findscjdRecNo2(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh) else set @OutColums2=@OutColums2+',dbo.findscjdRecNo2(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh) --第三次插入值列表--计划完成 if @OutColums3='' set @OutColums3='dbo.findscjdRecNo3(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh) else set @OutColums3=@OutColums3+',dbo.findscjdRecNo3(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh) --第四次插入值列表--接件日期 if @OutColums4='' set @OutColums4='dbo.findscjdRecNo4(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh) else set @OutColums4=@OutColums4+',dbo.findscjdRecNo4(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh) --第五次插入值列表--完成日期 if @OutColums5='' set @OutColums5='dbo.findscjdRecNo5(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh) else set @OutColums5=@OutColums5+',dbo.findscjdRecNo5(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh) --被插入字段列表 if @InpColums='' set @InpColums='工序'+convert(varchar(2),@xh) else set @InpColums=@InpColums+',工序'+convert(varchar(2),@xh) set @xh=@xh+1 endset @mysql=@mysql+@FildList+')'set @OutColums1='insert into @mytemp ('+@OutConst+'工序,'+@InpColums+') select '+@OutConst+'''工序'' 工序 ,'+@OutColums1+' from ywdd where '+@SQLQualification--第一条插入语句set @OutColums2='insert into @mytemp ('+@OutConst+'工序,'+@InpColums+') select 序号,NULL 客户,NULL 订单编号,NULL 品名,NULL 材质,NULL 成品尺寸,NULL 数量,NULL 预交期,''计划开始'' 工序 ,'+@OutColums2+' from ywdd where '+@SQLQualification--第二条插入语句set @OutColums3='insert into @mytemp ('+@OutConst+'工序,'+@InpColums+') select 序号,NULL 客户,NULL 订单编号,NULL 品名,NULL 材质,NULL 成品尺寸,NULL 数量,NULL 预交期,''计划完成'' 工序 ,'+@OutColums3+' from ywdd where '+@SQLQualification--第三条插入语句set @OutColums4='insert into @mytemp ('+@OutConst+'工序,'+@InpColums+') select 序号,NULL 客户,NULL 订单编号,NULL 品名,NULL 材质,NULL 成品尺寸,NULL 数量,NULL 预交期,''接件日期'' 工序 ,'+@OutColums4+' from ywdd where '+@SQLQualification--第四条插入语句set @OutColums5='insert into @mytemp ('+@OutConst+'工序,'+@InpColums+') select 序号,NULL 客户,NULL 订单编号,NULL 品名,NULL 材质,NULL 成品尺寸,NULL 数量,NULL 预交期,''完成日期'' 工序 ,'+@OutColums5+' from ywdd where '+@SQLQualification--第五条插入语句set @mysql=@mySQL+char(13)+@OutColums1+char(13)+@OutColums2+char(13)+@OutColums3+char(13)+@OutColums4+char(13)+@OutColums5+char(13)set @mysql=@mysql+'select '+@OutConst+'工序,'+@InpColums+' from @mytemp order by 序号,myid'exec (@mySQL)GO

