oracle查询数据列竟然还可以这样合并数据的两种方法

主要说明一下oracle11g版本的两种方法,以及避免的问题

这个是没有引用之前 因为角色名称会导出多行数据出现,需要合并角色名称这一栏的数据,其他数据进行分组

	/**这里是最开始的效果sql
	select s1.truename as truename, s2.rolenameas rolename,
	s3.deptname as 	deptname from user s1 
	left join s2 on s1.userid = s2.userid
	left join s3 on s3.fzruserid = s2.userid
	left join s4 on s1.userid = s4.userid
	group by s1.truename,s3.deptname,s2.rolename

在这里插入图片描述

wmsys.wm_concat() 方法以及乱码解决方法

	/** 这是使用第一种拼凑的方式 这里默认是以逗号隔开的 wmsys.wm_concat()
	  * 这里面的to_char()是为了解决wmsys.wm_concat()函数乱码的问题,小伙伴可以试一下
	select s1.truename as truename, wmsys.wm_concat(to_char(s2.rolename)) as rolename,
	s3.deptname as 	deptname from user s1 
	left join s2 on s1.userid = s2.userid
	left join s3 on s3.fzruserid = s2.userid
	left join s4 on s1.userid = s4.userid
	group by s1.truename,s3.deptname

查询结果如下:

在这里插入图片描述

这里是不加to_char()的查询结果

在这里插入图片描述

listagg(字段名,’,’) within group(order by 字段名 ) 方法以及乱码解决方法

	/** 这是使用第一种拼凑的方式 这里默认是以逗号隔开的 
	  *	listagg(字段名,',') within group(order by 字段名 )
	  * 这里面的to_char()是为了解决
	  * listagg(字段名,',') within group(order by 字段名 )函数乱码的问题,小伙伴可以试一下
	select s1.truename as truename, 
	listagg(to_char(s2.rolename),',') within group(order by s2.rolename ) as rolename,
	s3.deptname as 	deptname from user s1 
	left join s2 on s1.userid = s2.userid
	left join s3 on s3.fzruserid = s2.userid
	left join s4 on s1.userid = s4.userid
	group by s1.truename,s3.deptname

查询结果如下:

在这里插入图片描述

希望能帮到你

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值