为了实现指标自动采集,我在库中建
A表: 日期 地点1 地点2 地点3。
11.22 99 90 91想实现通过作业实现每天自动上报。
但是我从库里提取的值为
B表: 地点1 99
地点2 90
地点3 91该表是select出来的,不是临时表。
现在想出来的笨办法是分地点select出B表再update到A表,即每个地点写一个update语句,地点太多,太繁琐,不知道各位有什么高招,指导一下。
解决马上结帐。谢谢。
A表: 日期 地点1 地点2 地点3。
11.22 99 90 91想实现通过作业实现每天自动上报。
但是我从库里提取的值为
B表: 地点1 99
地点2 90
地点3 91该表是select出来的,不是临时表。
现在想出来的笨办法是分地点select出B表再update到A表,即每个地点写一个update语句,地点太多,太繁琐,不知道各位有什么高招,指导一下。
解决马上结帐。谢谢。
解决方案 »
- 求高手写分组带小记和总计的sql语句
- 数据库高手进来帮我看看这个库的设计,我是第一次接触到该类多表数据,所以估计很菜
- 如何从sql server中查出某条记录是什么时间插入的?
- 新手提问......200分相求,只能放100分,另外100分另开贴(决不食言)!!!!!!!!!(开的第二贴)
- 再加100分,救命啊!
- 什么是单独连接?
- 请问在SQL Server服务管理器中存在一个BIGFIX的服务器是病毒吗?
- 日志要把硬盘占满了
- VFP5下,如何在Grid中的某列(字符型)使用下拉列表框控件?
- 求一条sql语句,急,在线等
- 得到系统时间减去5秒该怎么做?
- **如何从数据库中一次取出固定行数的记录?外加排序问题。
没有日期字段马?
不知道else if能不能实现。
格式为 date 桂阳敖泉 桂阳白水 桂阳板桥 桂阳飞仙。
2006.11.22 2 3 3 5 。
2006.11.23 3 1 1 4 。
。 。 。 。 。 。
。 。 。 。 。 。
。 。 。 。 。目的是为了通过作业实现自动填表,每天的指标不一样。
date可以通过作业语句每天插入当天的日期,目标值要通过
下列语句查询
表A是由查询出来的
select area,erl=sum((I927+(I928+I933)/2+(I929+I934+I938)/3+(I930+I935+I939+I942)/4+(I931+I936+I940+I943+I945)/5+(I932+I937+I941+I944+I946+I947)/6+I948+(I949+I954)/2+(I950+I955+I959)/3+(I951+I956+I960+I963)/4+(I952+I957+I961+I964+I966)/5+(I953+I958+I962+I965+I967+I968)/6)/3600.0)
from Perf_Dat4,Perf_ObjInstance where Perf_Dat4.iObjInstanceId=Perf_ObjInstance.iObjInstanceId and ((convert(char(12),stdMeasureTime,108)='16:00:00' or convert(char(12),stdMeasureTime,108)='16:30:00') and convert(char(12),stdMeasureTime,102)=convert(varchar(10),CURRENT_TIMESTAMP,102)) group by area 通过作业定时查询,今天的运行结果为:
area erl
桂阳敖泉 2
桂阳白水 3
桂阳板桥 3
桂阳宝 5
桂阳方圆坪石 2
桂阳飞仙 0
桂阳四州山 4
桂阳洋市 1
宜章黄沙 4
宜章梅田 2
宜章岩泉0 2
宜章岩泉1 3
宜章岩泉2 2
宜章杨梅山 2
宜章瑶岗仙 1
宜章斋公山 3
每天的ERL值是会变化的。
现在就是要实现通过把select语句改为UPDATE语句,写到表B中去。
declare @field varchar(2000),@value varchar(2000)
set @field='' set @value=''
select @field=@field+','+area,@value=@value+','+convert(varchar,sum((I927+(I928+I933)/2+(I929+I934+I938)/3+(I930+I935+I939+I942)/4+(I931+I936+I940+I943+I945)/5+(I932+I937+I941+I944+I946+I947)/6+I948+(I949+I954)/2+(I950+I955+I959)/3+(I951+I956+I960+I963)/4+(I952+I957+I961+I964+I966)/5+(I953+I958+I962+I965+I967+I968)/6)/3600.0))
from Perf_Dat4,Perf_ObjInstance where Perf_Dat4.iObjInstanceId=Perf_ObjInstance.iObjInstanceId and ((convert(char(12),stdMeasureTime,108)='16:00:00' or convert(char(12),stdMeasureTime,108)='16:30:00') and convert(char(12),stdMeasureTime,102)=convert(varchar(10),CURRENT_TIMESTAMP,102)) group by area
exec('insert into A(日期'+@field')+' values('''+convert(varchar(10),getdate(),121)+''''+@value+')')
--我写的是insert,如果是update只需要一个变量累计@field=@field+','+area+'='+convert(varchar,sum(...)),最后去个逗号用exec('update A set '+@field+定位条件)就好
declare @sumcols varchar(4000)
set @cols =''
set @sumcols=''select
@cols=@cols +','+area,
@sumcols=sumcols+
',sum(case when area='+'''+ area +'''+' then erl else 0 end) as ['+ area+']'
from
b
group by
area
set @cols='日期'+@cols
set @sumcols= convert(varchar(10),getdate(),120)+@sumcols
exec('insert into A('+@cols+') select '+@sumcols+' from b')