主要说明一下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
查询结果如下:
希望能帮到你