关于oracle函数listagg的使用说明
做项目的过程中遇到过一个这样的需求,在“用户查询”前台加一个字段“用户角色”,要将用户的所有角色查询出来放到一个字段中,角色之间用“,”分隔。
发现一个办法是使用Oracle的listagg方法。
- WITH TMP AS
- (SELECT TU.USERNAME, TE.EMP_NAME, TE.EMP_DUTY_NAME, TR.ROLE_NAME
- FROM TS_USER TU,
- TS_USER_ROLE TUR,
- TS_ROLE TR,
- TM_DEPARTMENT TD,
- TM_EMPLOYEE TE
- WHERE TU.USER_ID = TUR.USER_ID
- AND TU.EMP_ID = TE.EMP_ID
- AND TUR.ROLE_ID = TR.ROLE_ID
- AND TU.DEPT_ID = TD.DEPT_ID
- AND TD.DEPT_CODE = '755Y'
- ORDER BY TU.USERNAME ASC)
- SELECT USERNAME 用户名,
- EMP_NAME 员工姓名,
- EMP_DUTY_NAME 职位,
- LISTAGG(ROLE_NAME, ',') WITHIN GROUP(ORDER BY ROLE_NAME) 用户角色
- FROM TMP
- GROUP BY USERNAME, EMP_NAME, EMP_DUTY_NAME;
查询结果:
| ID | 用户名 | 用户姓名 | 职位 | 角色 |
| 1 | 162 | 162 | 保洁员 | 子系统管理员,调度用户 |
| 2 | 195 | 195 | 运作司机 | 总部质量管理员,普通用户 |
| 3 | 202 | 202 | 员工关系中级专员Ⅱ | 地区质量管理员 |
| 4 | 7310 | ** | 质检管理工程师 | 地区质量界定员 |
| 5 | 124915 | ** | 调度经理 | 分点部用户 |
| 6 | 592884 | **浩 | 网络规划初级专员Ⅰ | 分点部用户,地区质量界定员,地区质量管理员,普通用户 |
关于oracle函数listagg的使用说明的更多相关文章
- oracle函数listagg的使用说明(分组后连接字段)
关于oracle函数listagg的使用说明 工作中经常遇到客户提出这样的需求,希望在汇总合并中,能够把日期逐个枚举出来. 如图,原始数据是这样的: 客户希望能够实现这样的汇总合并: 那么通常我会使用 ...
- [转载]oracle函数listagg的使用说明
工作中经常遇到很多需求是这样的,根据条件汇总某些字段,比如我遇到的是,我们公司有三个投资平台,同一个客户拿手机号在三个平台都注册了,但注册过的用户名不一样,显示的时候需要根据手机号显示所有注册过的名称 ...
- oracle函数listagg使用
作用 可以实现将多列记录聚合为一列记录,实现数据的压缩 语法结构 listagg(measure_expr,delimiter) within group ( order by order_by_cl ...
- Oracle列转行函数LISTAGG()
--Oracle列转行函数LISTAGG() with tb_temp as( select 'China' 国家,'Wuhan' 城市 from dual union all select 'Chi ...
- Oracle列转行函数Listagg以及pivot查询示例
简单的Oracle列转行函数Listagg示例: CREATE TABLE tbl_test (catalog VARCHAR(1),product VARCHAR(2),amount NUMBER) ...
- oracle的listagg函数
今天需要将 BDST_ID相同的PROJECT_ID用逗号分隔拼成一个字符串,于是想到了oracle的listagg函数 表名为PM_BDST_PROJECT select tt.BDST_ID, l ...
- oracle 聚合函数 LISTAGG ,将多行结果合并成一行
LISTAGG( to_char(Item_Category_Name), ',') WITHIN GROUP(ORDER BY Item_Category_Name) -- 将 Item_Cate ...
- 【Oracle】oracle之listagg分析函数
oracle分析函数——listagg篇 (1)使用listagg将多行数据合并到一行 例表: select deptno, ename from emp order by deptno, ename ...
- oracle函数,游标,视图使用总结0.000000000000000000001
oracle函数或者叫存储过程,在实际的开发过程中对于复杂的业务需求是非常有用的,非常有效率的也是非常好玩儿的一个技术点. 平常在开发过程中对于CRUD功能较多.一般SQL即可应付,大不了就是长一点而 ...
随机推荐
- python简说(二十八)json.path
import jsonpathres = jsonpath.jsonpath(d,'$..name') 字典,模糊匹配
- python简说(二十)操作excel
一.pip install xlrdpip install xlwtpip install xlutils 二.写excel import xlwtbook = xlwt.Workbook() #新建 ...
- 浅谈 DDoS 攻击与防御
浅谈 DDoS 攻击与防御 原创: iMike 运维之美 什么是 DDoS DDoS 是英文 Distributed Denial of Service 的缩写,中文译作分布式拒绝服务.那什么又是拒 ...
- oracle12c的日志查看
查看GI日志:切换到grid用户 查看DB日志:切换到oracle的目录下 执行[oracle@swnode1 ~]$ adrci [oracle@swnode1 ~]$ adrci ADRCI: R ...
- 学习MFC的建议
1.继续深入学习C++的内容,打好面向对象的程序综合设计与编程基础,参考书籍<C++Primer>. 2.打好Windows编程基础(参考书<Windows程序设计>(第五版) ...
- Codeforces 868D Huge Strings - 位运算 - 暴力
You are given n strings s1, s2, ..., sn consisting of characters 0 and 1. m operations are performed ...
- bash 变量
本地变量: 变量赋值:name=value 变量引用:${name} , $name "":变量名会替换为其值 '':变量名不会替换为其值 查看变量: set 撤销变量:unse ...
- 2018年省赛蓝桥杯JavaB组
第一题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 解法: 2000年为闰年,2月29天 31 ...
- topcoder srm 697 div1 -3
1.给定长度为$n$ 的数组$b$,构造长度为$n$ 的且没有重复元素的数组$a$,令$p_{i}$表示$a$中除$a_{i}$外其他元素的乘积.构造出的$a$满足$a_{i}^{b_{i}}$能够被 ...
- tp框架中的一些疑点知识-6
vim自带一个目录浏览器,使用命令:E就可以调出来,实际上就是浏览器的名字就是"网络读写"netrw vim也自带了 补全功能, 启动键是 "ctrl_N" 或 ...