优秀的编程知识分享平台

网站首页 > 技术文章 正文

Oracle数据库巧用distinct关键字解决复杂统计问题

nanyue 2024-10-20 07:42:29 技术文章 7 ℃

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

(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

执行结果如下图:

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

Oracle数据库相关链接:

Oracle查询基础

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

MySQL数据库相关链接:

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

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

easyui数据库相关链接:

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

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

最近发表
标签列表