做項目的過程中遇到過一個這樣的需求,在“用戶查詢”前台加一個字段“用戶角色”,要將用戶的所有角色查詢出來放到一個字段中,角色之間用“,”分隔。
發現一個辦法是使用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 | **浩 | 網絡規划初級專員Ⅰ | 分點部用戶,地區質量界定員,地區質量管理員,普通用戶 |
