从数据记录表把数据记录由行转入固定表中的固定列的SQL语句

以下程序是把原先保存各类数据不同时段的值的一个数据记录表,从中按指定的时段取出他们的值放到以它们来命名为字段的新表中。
比如:数据记录表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

这是我写好的,效果是有了,但是运行速度i不是很理想,所以大家有怎么更好的办法请贴出来共同探导

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

阅读更多

没有更多推荐了,返回首页