oracle中分组求和后查询其他列应用场景

        最近有个需求,对仓库,库区,货位,检验编码相同的数据进行分组然后统计每组的实物库存,但是查询列还有其它列,group by是单分组函数,使用group by就不能查询分组以外的字段,在网上查阅了很多文章发现都没有详解,然后自己总结了这篇文章,希望对此刻正在找解决办法的你有所帮助。

	SELECT
		k.ID,
		k.MOMWAREHOUSEID,
		k.MOMRESERVOIRAREAID,
		k.MOMGOODSALLOCATIONID,
		k.MOMMATERIALID,
		k.MOMINSPECTIONCODE,
		c.MOMWAREHOUSENAME,
		q.MOMRESERVOIRAREANAME,
		h.MOMGOODSALLOCATION,
		w.MOMMATERIALCODE,
		w.MOMMATERIALNAME,
		w.MOMMARK,
		w.MOMSPECIFICATIONS,
		k.MOMOVERDUEIDENTIFICATION,
		to_char(k.MOMPERIODVALIDITY,'YYYY-MM-DD HH24:MI:SS') MOMPERIODVALIDITY,
		sum(nvl( k.MOMPHYSICALLNVENTORY, 0 )) over ( PARTITION BY k.MOMWAREHOUSEID, k.MOMRESERVOIRAREAID, k.MOMGOODSALLOCATIONID,
	k.MOMMATERIALID,k.MOMINSPECTIONCODE	) MOMPHYSICALLNVENTORY,
		sum(nvl( k.MOMBAKINGCOUNT, 0 )) over ( PARTITION BY k.MOMWAREHOUSEID, k.MOMRESERVOIRAREAID, k.MOMGOODSALLOCATIONID, k.MOMMATERIALID,k.MOMINSPECTIONCODE ) MOMBAKINGCOUNT,
		row_number () over ( PARTITION BY k.MOMWAREHOUSEID, k.MOMRESERVOIRAREAID, k.MOMGOODSALLOCATIONID, k.MOMMATERIALID,
	k.MOMINSPECTIONCODE ORDER BY k.MOMBAKINGCOUNT ) AS rn 
	FROM
		DGMOMPTDGMOMGLLJJCKGLKCMX k
		LEFT JOIN DGMOMPTDGMOMGLLJJCKGLCKXX c ON k.MOMWAREHOUSEID = c.ID
		LEFT JOIN DGMOMPTDGMOMGLLJJCKGLKQXX q ON k.MOMRESERVOIRAREAID = q.ID
		LEFT JOIN DGMOMPTDGMOMGLLJJCKGLHWXX h ON k.MOMGOODSALLOCATIONID = h.ID
		LEFT JOIN DGMOMPTDGMOMGLLJJCKGLJCSJWH w ON k.MOMMATERIALID = w.ID
		WHERE k.MOMDATASTATE = 0
		AND c.MOMDATASTATE = 0
		AND q.MOMDATASTATE = 0
		AND h.MOMDATASTATE = 0
		AND w.MOMDATASTATE = 0
		AND k.MOMPHYSICALLNVENTORY > 0 
		AND k.MOMPERIODVALIDITY < SYSDATE

以上代码执行的结果:

最终取行号为1的就实现了分组求和

总结:

over()搭配row_number () 时需要使用ORDER BY,这样会记录每组数据的行号

over()搭配聚合函数时不需要使用ORDER BY,如果使用ORDER BY 那么聚合函数里面的值会依次计算,可根据实际需求自行修改

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值