zoukankan      html  css  js  c++  java
  • oracle 之 cube 应用

    很久以前就知道有cube这个函数,但一直没机会使用到它,今天做个树形的报表终于用上了。

    报表按A B两列分组统计,A B列关系是多对多,要求A作父列,B做子列 显示成树形,然后再交换显示

    效果如图

    一开始考虑用 over (partition by ) 但发现需要进行子查询,后想到rollup 联想到cube

    经过多次考虑完善,终于出炉

    select decode(grouping(s.fname_l2),1,decode(grouping(u.fname_l2),1,'总计',u.fname_l2),s.fname_l2) 制单人,
    decode(grouping(u.fname_l2),1,decode(grouping(s.fname_l2),1,'总计',s.fname_l2),u.fname_l2) 发货组织,
    grouping(u.fname_l2) guname,grouping(s.fname_l2) gsname,
    rtrim(u.fname_l2 ||'!'||s.fname_l2,'!') FlongnumberA,
    rtrim(s.fname_l2 ||'!'||u.fname_l2,'!') FlongnumberB,
    count(distinct b.FOrderCustomerID) 商家数量,count(distinct b.fnumber) 订单数量,
    sum(decode(a.FBaseStatus,4,1,0)) 行审核数量,sum(decode(a.FBaseStatus,7,1,0)) 行关闭数量,
    sum(a.FLocalTaxAmount) 总金额
    from T_SD_SaleOrder b
    inner join T_SD_SaleOrderEntry a on a.fparentid=b.fid
    left join T_PM_User u on b.FCreatorID=u.fid
    left join T_ORG_Storage s on a.FStorageOrgUnitID=s.fid
    where b.fbizdate<=enddate and b.fbizdate>=startdate
    and (b.FBaseStatus=4 or b.FBaseStatus=7)--审核 关闭
    and b.fnumber not like '*%'
    group by cube(u.fname_l2,s.fname_l2)

    上面,decode 可以用case when 替换 在多个条件的情况下会少好多代码

  • 相关阅读:
    TTVNC 2.0 发布了
    软件收费问题,目前没有限制, 全部免费
    为什么服务器端要确认才能连接通过
    关于transfer file功能的使用?
    同一台机器上测试会出现很多黑块
    TTVNC 设计理念
    TTVNC 2.2发布
    redis连接池 jedis2.9.0.jar+commonspool22.4.2.jar
    Calendar add 方法 和set方法
    jar包读取包内properties文件
  • 原文地址:https://www.cnblogs.com/tobase/p/4123733.html
Copyright © 2011-2022 走看看