關於oracle函數listagg的使用說明


做項目的過程中遇到過一個這樣的需求,在“用戶查詢”前台加一個字段“用戶角色”,要將用戶的所有角色查詢出來放到一個字段中,角色之間用“,”分隔。

發現一個辦法是使用Oracle的listagg方法。

 

[sql]  view plain  copy
 
  1. WITH TMP AS  
  2.  (SELECT TU.USERNAME, TE.EMP_NAME, TE.EMP_DUTY_NAME, TR.ROLE_NAME  
  3.     FROM TS_USER       TU,  
  4.          TS_USER_ROLE  TUR,  
  5.          TS_ROLE       TR,  
  6.          TM_DEPARTMENT TD,  
  7.          TM_EMPLOYEE   TE  
  8.    WHERE TU.USER_ID = TUR.USER_ID  
  9.      AND TU.EMP_ID = TE.EMP_ID  
  10.      AND TUR.ROLE_ID = TR.ROLE_ID  
  11.      AND TU.DEPT_ID = TD.DEPT_ID  
  12.      AND TD.DEPT_CODE = '755Y'  
  13.    ORDER BY TU.USERNAME ASC)  
  14. SELECT USERNAME 用戶名,  
  15.        EMP_NAME 員工姓名,  
  16.        EMP_DUTY_NAME 職位,  
  17.        LISTAGG(ROLE_NAME, ',') WITHIN GROUP(ORDER BY ROLE_NAME) 用戶角色  
  18.   FROM TMP  
  19.  GROUP BY USERNAME, EMP_NAME, EMP_DUTY_NAME;  

查詢結果:

 

ID 用戶名 用戶姓名 職位 角色
1 162 162 保潔員 子系統管理員,調度用戶
2 195 195 運作司機 總部質量管理員,普通用戶
3 202 202 員工關系中級專員Ⅱ 地區質量管理員
4 7310 ** 質檢管理工程師 地區質量界定員
5 124915 ** 調度經理 分點部用戶
6 592884 **浩 網絡規划初級專員Ⅰ 分點部用戶,地區質量界定員,地區質量管理員,普通用戶


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM