在工作中碰到这样一个需求:
(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获取项目的绝对路径