dreamhua 2020-06-05
本来也是想找2005年时期常访问的一个Oracle论坛的,没找到,就找到了别人问问题的这个链接,那就再当练练指法吧
https://bbs.bccn.net/thread-486056-1-1.html
业务说明:查询出所有公司的发料总额,若该公司有多条发料运费,则将多条发料运费求和,每个公司只显示一条数据。
例如:数据库中有字段 公司(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
运行结果: