以下程序是把原先保存各类数据不同时段的值的一个数据记录表,从中按指定的时段取出他们的值放到以它们来命名为字段的新表中。
比如:数据记录表A
序号  数据编号  数据值  班别     日期
 1     1001      20.5    甲班     2010-3-20
 2     1002      10.5    甲班     2010-3-20
 3     1001      10.5    甲班     2010-3-20
 4     1002      10.5    甲班     2010-3-20
 5     1003      10.5    甲班     2010-3-20
数据定义表B
序号    源数据编号    列名    类型
 1       1001          aa       1
 2       1002          bb       2
 3       1001          cc       1
数据表C
序号     aa       cc
 1      15.5    10.5
数据表D
序号     bb
1       10.5这是我写好的,效果是有了,但是运行速度相当慢,请问有怎么更好的办法吗?
declare @bb char(10)
declare @dt datetime
declare @ph int
declare @bh int
declare @i int
declare @tb char(10)
declare @zd char(10)
declare @sj decimal(9,3)
declare @sql nvarchar(1000)
select @i=1
select @bb='甲班'
select @dt='2010-3-20'
select @bh=BBMX_BH from TB_BBMX where BBMX_BB=@bb and BBMX_DATE=@dt //取出所有数据统一记录编号
while @i<3           //因为有多种类型数据,不同类型所在的数据表不一样,所以需要按类型取相应的数据编号
begin
  if @i=1
     select @tb='TB_BBCL'//类型对应数据表
  if @i=2
     select @tb='TB_BBYZ'
  declare cur_ph cursor for
  select BB_DYPH ,BB_SJL from TB_BBSJDY where BB_TP=@i order by BB_DYPH asc //取数据编号(在数据记录表中的编号)和对应所在的数据表的字段名。
  open cur_ph
  fetch next from cur_ph into @ph,@zd
  while @@fetch_status=0
  begin
    select @sj=avg(YS_YPS) from TB_YS where YS_SJPH =@ph and YS_BB=@bb and YS_DATE=@dt  //从数据记录表中取出数据值
    set @sql='update '+ @tb+' set '+ @zd+'='+convert(char,isnull(@sj,0))+' where BB_BH='+str(@bh)  //插入所在新表中的对应列。
    exec(@sql)
    set @sj=null
    fetch next from cur_ph into @ph,@zd
  end
  close cur_ph
  deallocate cur_ph
  set @i=@i+1
  continue
end