SQL根据平均值等比例修改原始值

由于业务需求数据显示的年度报表数值时每日采集的整点数据的平均值,然而现场人员给我们反馈回来直接就是平均值,但是数据库中原始存储的数据是每日每个时间段的整点数值。
SWS_ST_SPB_P 原始数据每天都有数个整点数据:

这里写图片描述

SWS_ST_SPB_P_copy 这是我们修改后每日的平均值每天只有一条数据:
这里写图片描述

那么我所要解决的问题是将SWS_ST_SPB_P 原始数据中需要修改的数据根据修改过后的SWS_ST_SPB_P_copy 中的数据等比例的缩放。

这里写图片描述

-- 删除所要修改的原始数据
DELETE sc FROM SWS_ST_SPB_P sc
inner join SWS_ST_SPB_P_copy s
on s.stcd = sc.stcd 
and convert(varchar(10), s.tm, 126)  = convert(varchar(10), sc.tm, 126)
and s.mpcd = sc.mpcd  
where s.tm >='2017-09-01 00:00:00' and s.tm < '2017-10-01 00:00:00'  
and s.mpcd = sc.mpcd

-- 增加的字段
 ALTER TABLE SWS_ST_SPB_P_copy add r1sum decimal,r2sum decimal,r3sum decimal,rcount decimal ;
 SELECT * INTO SWS_ST_SPB_P_copy1 FROM SWS_ST_SPB_P;

-- 创建临时表 aaa
select t.mpcd, sum(t.r1) as r1sum,sum(t.r2) as r2sum,sum(t.r3) as r3sum,count(*) rcount, convert(varchar(10), t.tm, 126) as ttime  
into aaa from (
select s.mpcd,s.r1,s.r2,s.r3,sc.r1 as c1,sc.r2 AS c2,sc.r3 as c3, s.tm AS TM from SWS_ST_SPB_P_copy1 s 
LEFT JOIN SWS_ST_SPB_P_copy sc on s.stcd = sc.stcd 
and convert(varchar(10), s.tm, 126)  = convert(varchar(10), sc.tm, 126)
and s.mpcd = sc.mpcd  
where s.tm >='2017-09-01 00:00:00' and s.tm < '2017-10-01 00:00:00'  
and s.mpcd = sc.mpcd
) t  
 GROUP BY t.mpcd ,convert(varchar(10), t.tm, 126)

select a.*,s.r1,s.r2 into result from aaa  a
LEFT JOIN SWS_ST_SPB_P_copy s
on a.mpcd = s.mpcd and a.ttime = s.tm
where s.tm >='2017-09-01 00:00:00' and s.tm < '2017-10-01 00:00:00' 
and s.mpcd = a.mpcd

select t.stcd, t.mpcd,t.r1*(t.c1*rcount)/t.r1sum as r1,t.r2*(t.c2*rcount)/t.r2sum as r2,t.tm
into resultSPB from (
select s.stcd, s.mpcd,s.r1,s.r2,s.r3, s.tm AS TM,sc.r1 as c1,sc.r2 as c2,sc.r1sum as r1sum,sc.r2sum as r2sum,sc.r3sum as r3sum,sc.rcount as rcount from SWS_ST_SPB_P_copy1 s 
LEFT JOIN result sc on  
  convert(varchar(10), s.tm, 126)  = convert(varchar(10), sc.ttime, 126)
and s.mpcd = sc.mpcd  
where s.tm >='2017-09-01 00:00:00' and s.tm <='2017-09-30 23:59:00'
and s.mpcd = sc.mpcd
)t 
;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值