distinct对两个字段去重_Oracle数据库巧用distinct关键字解决复杂统计问题

在工作中碰到这样一个需求:

(1)统计每种物料在订单中的总数量

(2)统计每种物料共在多少个订单出现过

如果每张订单,每个物料只能出现一次,那么,使用count(vbillcode) (注:vbillcode为订单编号)即可解决。

但是,同一张订单可以多次出现相同的物料,count(vbillcode)是对数据总条数进行统计,显然不能满足。

Oracle数据库显然不会这么弱,可以把count和distinct一起使用,解决这个问题

SQL如下

select

b.cmaterialid as 物料,sum(b.nnum), -- 物料总数,

count(distinct a.vbillcode), -- 订单个数

count(a.vbillcode) --物料总条数

from so_saleorder a

left join so_saleorder_b b on a.csaleorderid = b.csaleorderid

where nvl(a.dr,0) = 0 and nvl(b.dr,0) = 0

group by b.cmaterialid

执行结果如下图:

5baa1b3fcd088ff687a525a363f23a5f.png

count中使用distinct

从查询结果后两个字段可以看出,哪些物料在一个订单中多次出现,如果两个值相等,说明该物料在每个订单中只出现一次,如果不相等,说明该物料至少在一个订单中多次出现。

Oracle数据库相关链接:

Oracle查询基础

在Oracle中实现客户明细账统计

MySQL数据库相关链接:

MySQL学习系列之十二——组合查询

MySQL学习系列之八——分组数据

easyui数据库相关链接:

easyui中datagrid添加单元格编辑事件

easyui中datagrid页脚数据动态刷新以及JS获取项目的绝对路径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值