题目是这样的,建立一个交易记录表,表字段名有交易时间、订单号、商品名称、商品单价、数量、总量,然后用触发器,当我在交易记录表输入信息时,能够自动在日报表、月报表、年报表、季度报表汇总,后面四个表只要时间、销售总额两个字段名。
解决方案 »
- SQL2000 存储过程里,如何忽略错误(也就在发生错时不退出,而是执行下一条语句)
- 用Hibernate使用SQL查询返回类型是什么
- where子句和group by子句要怎样按列的次序引用列?
- SQLServer2005如何连接数据库文件.mdf,如果不能,怎样将.mdf导入数据库中
- 巨简单问题,在线给分
- 求1条SQL语句
- 急求!!!!update 数据库撤销
- 请问“存储过程”和“用户定义的函数”有什么不同???
- 三张表进行计算
- 安装SQLServer2000提示"以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机"
- mysql访问权限的问题
- 【高分跪求】DBA选拔、培养等等管理文档
create trigger 统计
on 交易记录表
after insert
as
begin
insert into 日报表(时间,金额) select convert(varchar(10),交易时间,120),sum(商品单价*数量) from 交易记录表 group by convert(varchar(10),交易时间,120)
insert into 月报表(时间,金额) select convert(varchar(7),交易时间,120),sum(商品单价*数量) from 交易记录表 group by convert(varchar(7),交易时间,120)
insert into 年报表(时间,金额) select convert(varchar(7),交易时间,120),sum(商品单价*数量) from 交易记录表 group by convert(varchar(4),交易时间,120)
--季度自己考虑
end
create trigger tr_交易记录表
on 交易记录表 after insert
as
begin
set nocount on
merge 日报表 as o
using inserted as s
on cast(o.时间 as date)=cast(s.交易时间 as date)
when matched then
update set o.销售总额=o.销售总额+s.总量
when not matched then
insert(时间,销售总额) values(cast(s.交易时间 as date),s.总量);
merge 月报表 as o
using inserted as s
on left(convert(varchar,o.时间,111),7)=left(convert(varchar,s.交易时间,111),7)
when matched then
update set o.销售总额=o.销售总额+s.总量
when not matched then
insert(时间,销售总额) values(left(convert(varchar,s.交易时间,111),7),s.总量);
merge 年报表 as o
using inserted as s
on left(convert(varchar,o.时间,111),4)=left(convert(varchar,s.交易时间,111),4)
when matched then
update set o.销售总额=o.销售总额+s.总量
when not matched then
insert(时间,销售总额) values(left(convert(varchar,s.交易时间,111),4),s.总量); merge 季度报表 as o
using inserted as s
on left(convert(varchar,o.时间,111),5)=left(convert(varchar,s.交易时间,111),5)
and substring(o.时间,6,1)=cast((month(s.交易时间)-1)/3+1 as varchar)
when matched then
update set o.销售总额=o.销售总额+s.总量
when not matched then
insert(时间,销售总额) values(left(convert(varchar,s.交易时间,111),5)+cast((month(s.交易时间)-1)/3+1 as varchar),s.总量);
end