分组汇总 | 分组汇总去重_了解几种汇总的用法

dreamhua 2020-06-05

本来也是想找2005年时期常访问的一个Oracle论坛的,没找到,就找到了别人问问题的这个链接,那就再当练练指法吧
https://bbs.bccn.net/thread-486056-1-1.html

请教SQL怎么写?

  业务说明:查询出所有公司的发料总额,若该公司有多条发料运费,则将多条发料运费求和,每个公司只显示一条数据。
      例如:数据库中有字段  公司(butxt) 运费状态 status  运费  zyf
        我写的SQL查出来的数据显示结果如下:
            公司       运费状态      运费
            西安公司       发料        100
            西安公司       发料        200
            宝鸡公司       发料        100
        但我想要的结果是:
             公司         运费状态       运费
            西安公司        发料          300
            宝鸡公司        发料          100
            
如下是我写的SQL该如何修改:
   SELECT BUTXT,STATUS,
            SUM(CASE WHEN Z.STATUS=‘发料‘ THEN Z.ZFY ELSE ‘0‘ END)AS FLZE,
            SUM(CASE WHEN Z.STATUS=‘退料‘ THEN Z.ZFY ELSE ‘0‘ END)AS TLZE
            FROM EKKO
            GROUP BY BUTXT,STATUS,ZYF
            ORDER BY BUTXT ASC
            注:FLZE是发料总额   TLZE是退料总额
    请大神们多多指导,该如何修改SQL,谢谢

-----------------------------------------------------------------------
select * from tbGroupSum0605
-----------------------------------------------------------------------
--实现方法1
select fCompany,fFeeStatus,sum(fFee) as [某家公司的总数 ]     --如果fFeeStatus状态只有一种时可以这样做,如果有多种就不可这样做了
from tbGroupSum0605
group by fCompany,fFeeStatus
order by fCompany asc
-----------------------------------------------------------------------
--实现方法2
select fCompany,
          fFeeStatus,
          sum(case  when fFeeStatus=‘发料‘ then fFee end) as [某家公司的总数]  --如果fFeeStatus状态有多总,增加条件就可以了   
from tbGroupSum0605                                                          --条件有几百种怎么办?    
group by fCompany,fFeeStatus
-----------------------------------------------------------------------
--实现方法3
select distinct
          fCompany,
          fFeeStatus,
          sum(fFee) over(Partition by fCompany ) AS [某家公司的总数 ]
from tbGroupSum0605
-----------------------------------------------------------------------

方法1、2、3的运行结果:

分组汇总 | 分组汇总去重_了解几种汇总的用法

--此步只是熟悉一下,但不属于上面的解决方法,别与上面的混淆
select fCompany,
          fFeeStatus,
          sum(fFee) over(Partition by fCompany ) AS [显示了有3笔交易,某家公司发料的总数]
from tbGroupSum0605

运行结果:

分组汇总 | 分组汇总去重_了解几种汇总的用法








相关推荐