现在做一个分组汇总的查询,表结构:
单位编码  指标  指标值
  092       2      10
  092       3      78
  085       2      25
现在需要做汇总,先根据 指标 分组,然后对电厂编码计算指标的汇总值,问题就是,现在分组后,指标的汇总计算方式不同,有的是累加求和,有的求平均,还有的涉及到别的指标的计算,例如:指标A的汇总=(指标B的各单位累计值)/(指标C的各单位累计值),这样的汇总查询该怎么写呢?这几天一直在做这个,头都痛了,晕啊
这里的汇总数据必须计算,这样的报表以前真没做过,各位大牛给点建议吧,多谢!

解决方案 »

  1.   


    如果你用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
      

  2.   

    没文化真可怕!
    1楼的,谢谢了,没想到用sql可以有这种解决方式,我对sql的认识实在是太肤浅了,以后得需要认真学习sql啊