换一种思路解决问题

本文介绍如何通过SQL查询实现水晶报表中累计柱状图的需求。通过对原始数据进行预处理,使用子查询和聚合函数来生成符合预期的数据集,进而展示时间序列上的累计金额。
今天看到这样一个问题
我的数据表中有以下记录
id     type     time         amount
1         1         080101         100
2         1         080102         20
3         2         080101         30
4         2         080103         50
5         1         080105         10
...
我想在水晶报表中,用   柱图   表示,用time和type做分组,目前显示效果是,横坐标是时间,080101上面有两个柱,type为1的值是100,type为2的值是30,080102上面,type为1的值是20。。。
我期望的效果是一种累加,即在080102上面,type为1的值不是20,而是加上之前所有天type为1的,即120。

以我的经验,单纯靠水晶报表图表似乎实现不出来这个效果。简单试验了下,确实不行,于是转而在数据上下功夫

经过多次试验,构造出如下SQL,
SELECT t1 AS type1, tt2 AS time1, Sum(a.aa1) AS amount
FROM
(SELECT sum(amount) as aa1, type1 as t1,time1 as t2 FROM test1 group by type1,time1)  AS a,
(select type1 as tt1,time1 as tt2 from test1 group by type1,time1 )  AS b
WHERE a.t1=b.tt1 and a.t2<=b.tt2
GROUP BY a.t1, b.tt2

执行后构造出的数据为
查询1 type1 time1 amount 1 080101 100 1 080102 120 1 080105 130 2 080101 30 2 080103 80
拿起计算器,按了几下,应该就是要的效果了

然后用这个View或者command再连上水晶报表,这效果就出来了







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值