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