现在做一个分组汇总的查询,表结构:
单位编码 指标 指标值
092 2 10
092 3 78
085 2 25
现在需要做汇总,先根据 指标 分组,然后对电厂编码计算指标的汇总值,问题就是,现在分组后,指标的汇总计算方式不同,有的是累加求和,有的求平均,还有的涉及到别的指标的计算,例如:指标A的汇总=(指标B的各单位累计值)/(指标C的各单位累计值),这样的汇总查询该怎么写呢?这几天一直在做这个,头都痛了,晕啊
这里的汇总数据必须计算,这样的报表以前真没做过,各位大牛给点建议吧,多谢!
单位编码 指标 指标值
092 2 10
092 3 78
085 2 25
现在需要做汇总,先根据 指标 分组,然后对电厂编码计算指标的汇总值,问题就是,现在分组后,指标的汇总计算方式不同,有的是累加求和,有的求平均,还有的涉及到别的指标的计算,例如:指标A的汇总=(指标B的各单位累计值)/(指标C的各单位累计值),这样的汇总查询该怎么写呢?这几天一直在做这个,头都痛了,晕啊
这里的汇总数据必须计算,这样的报表以前真没做过,各位大牛给点建议吧,多谢!
如果你用oracle 10g或更高版本,使用sql model可以解决你的问题。举个例子create table t(x varchar2(10),y varchar2(10), z int);
insert into T (X, Y, Z) values ('01', 'A', 5);
insert into T (X, Y, Z) values ('02', 'A', 4);
insert into T (X, Y, Z) values ('03', 'B', 31);
insert into T (X, Y, Z) values ('04', 'B', 32);
insert into T (X, Y, Z) values ('05', 'C', 323);
insert into T (X, Y, Z) values ('06', 'C', 322);commit;SQL> select * from t;
X Y Z
---------- ---------- ---------------------------------------
01 A 5
02 A 4
03 B 31
04 B 32
05 C 323
06 C 322假设统计规则如下:
1)如果Y=B,那么统计累计
2)如果Y=C,那么统计平均值
3)如果Y=A,那么统计(Y=B的累计)/(Y=C的累计)
那么:SQL> SELECT y,z FROM
2 (
3 select y,COUNT(1) c,SUM(z) z from t
4 GROUP BY y
5 ) a
6 MODEL DIMENSION BY(Y) MEASURES(Z,C)
7 RULES(
8 Z['A']=Z['B']/Z['C'],
9 z['C']=Z['C']/C['C']
10 );
Y Z
---------- ----------
A 0.09767441
B 63
C 322.5如果条件3)改为统计(Y=B的累计)/(Y=C的平均值),那么:
SQL> SELECT y,z FROM
2 (
3 select y,COUNT(1) c,SUM(z) z from t
4 GROUP BY y
5 ) a
6 MODEL DIMENSION BY(Y) MEASURES(Z,C)
7 RULES(
8 z['C']=Z['C']/C['C'],
9 Z['A']=Z['B']/Z['C']
10 );
Y Z
---------- ----------
A 0.19534883
B 63
C 322.5
1楼的,谢谢了,没想到用sql可以有这种解决方式,我对sql的认识实在是太肤浅了,以后得需要认真学习sql啊