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运行结果:
