2019年的夏天 2022-03-30 10:17 采纳率: 42.9%
浏览 39
已结题

case when 结合 sum函数失效

level2有合计 就取合计的那一项值,没有合计值,就自行进行sum汇总,但是并没有实现case when 的判断

img

img

但是明显他是所有都按照分组条件进行汇总了,并没有执行有合计只取合计那一项
我是按照 comcode , pubdate 进行group by分组的 第二个截图的出栏量 在每个pubdate底下 相当于合计项和子项又重复汇总了一遍

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-03-30 15:54
    关注

    最直接的思路,先查一次合计的,然后再union all 一次没有合计的

    select * fromwhere level2='合计'
    union all
    select * from 表 a where not exists 
    (select 1 from 表 b where a.comcode=b.comcode and a.pubdate=b.pubdate and b.level2='合计')
    

    另外一种思路,将合计和非合计的统计成两个字段分别统计,再判断原有的合计是否为0,为0则取非合计的统计值,不为0则取合计的统计值

    select comcode ,pubdate,
    case when 
    sum(case when level2='合计' then 出栏量 else 0 end ) =0 then 
    sum(case when level2<>'合计' then 出栏量 else 0 end )  
    else 
    sum(case when level2='合计' then 出栏量 else 0 end )
    end 
    fromgroup by comcode ,pubdate
    

    其实上面两种方式,要么是按行拆开,要么是按列拆开,当然也有其他写法,但方向应该都是怎么把数据拆开,才方便进行统计

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月7日
  • 已采纳回答 3月30日
  • 修改了问题 3月30日
  • 创建了问题 3月30日