Create table User01
(
uid varchar(5),
dt date,
p1 float,
p2 float
)
Create table User02
(
uid varchar(5),
weight float
)
Create table Result
(
dt date,
CV float
)
我有上面这三张表。User01是张动态的表,间隔固定时间,表中的数据会被清空,然后插入新数据。我想要实现的业务逻辑是:当User01表插入新数据后,它要和User02表进行关联,一起运算一个公式。最后把结果值插入到Result表中。
单次执行的语句是这样的:
;with cte as(
select U1.uid, U1.dt, (U1.p1-U1.p2)*U2.weight as New_p from User01 as U1
inner join User02 as U2
on U1.uid=U2.uid
)
insert into Result
select dt, STDEV(New_p)/AVG(New_p) as CV from cte
group by dt
如果是实时的自动运行是不是要使用触发器来做?我没用过涉及三张表的触发器,请各位帮帮忙。
------解决思路----------------------
既然有批量清空、插入的操作,你把这句语句加在这个操作的最后不就行了。
------解决思路----------------------
if (object_id('TR_U1', 'tr') is not null)
drop trigger TR_U1
go
create trigger TR_U1
on User01 --插入表中的数据
for insert
as
--定义变量
--给变量赋值
;with cte as(
select
U1.uid,
U1.dt,
(U1.p1-U1.p2)*U2.weight as New_p
from User01 as U1
inner join User02 as U2
on U1.uid=U2.uid
)
insert into Result
select dt,STDEV(New_p)/AVG(New_p) as CV from cte
group by dt
------解决思路----------------------
楼上的方法应该可以了