Oracle sql 统计分组过滤后的组显示其他数据0补全

本文介绍如何在Oracle SQL中处理分组查询时,确保所有城市(包括无数据的城市)都显示,无数据的城市用0填充。通过使用DISTINCT获取所有城市列表作为左连接主表,然后与包含数据的城市分组结果进行右连接,利用NVL函数将缺失的值替换为0。
摘要由CSDN通过智能技术生成

通过城市编号分组,查询统计数据,如果该城市没有数据,则会过滤掉此城市组。
需求:查询所有城市的数据,没有数据的显示为0.
首先通过DISTINCT查询所有的城市作为左连接中的主表,右表为查询出所有的有数据的城市分组,通过城市编码关联,取主表的城市和右表的数据,如果主表城市对应的数据没有,则用nvl(aaa,0)取0补全。

SELECT DISTINCT
			bg.TM_SALE_CITY,
			A.DTL_CH_NAME,
			A.DTL_EN_NAME,
			NVL (aa.FINA_GROUP_MONEY, 0) AS FINA_GROUP_MONEY,
			NVL (aa.FINA_GROUP_AMOUNT, 0) AS FINA_GROUP_AMOUNT,
			NVL (aa.PAY_AMOUNT, 0) AS PAY_AMOUNT,
			NVL (aa.FINA_SERVICE_FEE, 0) AS FINA_SERVICE_FEE,
			NVL (aa.FINA_RESERVE_AMOUNT, 0) AS FINA_RESERVE_AMOUNT,
			NVL (aa.FINA_FEE_AMOUNT, 0) AS FINA_FEE_AMOUNT,
			NVL (aa.CONSUME_TOTAL_EUR, 0) AS CONSUME_TOTAL_EUR,
			( SELECT NVL(SUM(NVL(c.CONSUME_TOTAL_EUR, 0)), 0) FROM TM_COST_EXPENDITURE c WHERE bg.TM_SALE_CITY = c.CITY_CODE
					and c.EXPENDITURE_STATUS = 'H' 	
				<!--  出团日期 --> 
					<if test="group_end_month_start !=null and group_end_month_start != '' ">	   		
						and to_char(to_date(c.EXPENDITURE_DATE,'yyyy-MM-dd'),'yyyy-MM') <![CDATA[>=]]> #{group_end_month_start}
					</if>
					<if test="group_end_month_end !=null and group_end_month_end != '' ">	
						and to_char(to_date(c.EXPENDITURE_DATE,'yyyy-MM-dd')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值