• 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 替换 在多个条件的情况下会少好多代码

  • 相关阅读:
    Oracle删除.dbf文件报错
    Java 7 新的 try-with-resources 语句,自动资源释放
    模式对话框提交form之后总是打开新的页面
    MyEclipse更改项目的发布目录
    IntelliJ IDEA 更换发布目录
    java.sql.SQLException: ORA-00942: 表或视图不存在
    编码那点事
    配置nginx实现windows/iis应用负载均衡
    MSMQ消息队列
    .NET 分布式技术比较
  • 原文地址:https://www.cnblogs.com/tobase/p/4123733.html
Copyright © 2020-2023  润新知