oracle和mysql中列转行用逗号分隔函数

一、 Oracle

oracle11g以前旧版本语法:wmsys.wm_concat(列名)

select wmsys.wm_concat(username) FROM students;-- 将username列记录值用逗号连接起来

以其它列分组,role_name列打印成一行用逗号隔开:

select u.user_id, u.dept_id, u.login_name, u.user_name, wmsys.wm_concat(r.role_name) as role_name from sys_user u
		left join sys_user_role ur on ur.user_id = u.user_id
		left join sys_role r on r.role_id = ur.role_id
		where u.del_flag = '0'
		group by u.user_id, u.dept_id, u.login_name, u.user_name
		order by u.create_time desc

oracle11g以上版本不支持wmsys.wm_concat,使用listagg() WITHIN GROUP ()函数代替:

select u.user_id, u.dept_id, u.login_name, u.user_name, listagg(r.role_name,',') within group(order by r.role_name) as role_name from sys_user u
		left join sys_user_role ur on ur.user_id = u.user_id
		left join sys_role r on r.role_id = ur.role_id
		where u.del_flag = '0'
		group by u.user_id, u.dept_id, u.login_name, u.user_name
		order by u.create_time desc

二、Mysql中group_concat函数

完整的语法:

group_concat([DISTINCT] 要连接的字段 [Order BY  排序字段 ASC/DESC] [Separator '分隔符'])
  1. 以其它列分组,role_name列打印成一行用逗号隔开(默认逗号分隔):
select user_id,group_concat(role_name) as role_name from sys_user group by user_id;

±-----±-------------------+
| user_id|role_name |
±-----±-------------------+
|1 | 安全员,施工人员,安全员|
|2 | 项目经理,现场监理 |
|3 | 总监|
±-----±-------------------+

  1. role_name列打印成一行,用分号分隔
select user_id,group_concat(role_name separator ';') as role_name from sys_user group by user_id; 

±-----±-------------------+
| user_id|role_name |
±-----±-------------------+
|1 | 安全员;施工人员,安全员|
|2 | 项目经理;现场监理 |
|3 | 总监|
±-----±-------------------+

  1. role_name列打印成一行,去重后用逗号隔开
select user_id,group_concat(distinct  role_name) as role_name from sys_user group by user_id; 

±-----±-------------------+
| user_id|role_name |
±-----±-------------------+
|1 | 安全员,施工人员|
|2 | 项目经理,现场监理 |
|3 | 总监|
±-----±-------------------+

  1. ole_name列打印成一行,逗号分隔,倒序排列
select user_id,group_concat(role_name order by role_name desc) as role_name from sys_user group by user_id; 

±-----±-------------------+
| user_id|role_name |
±-----±-------------------+
|1 | 施工人员,安全员|
|2 | 现场监理,项目经理 |
|3 | 总监|
±-----±-------------------+

参考博文:https://www.cnblogs.com/yingmo/p/6148360.html

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值