格式化Oracle查询输出

时间:2019-01-22 15:16:22

标签: sql oracle

我正在针对Oracle数据库中的架构运行以下查询,以获取一些详细信息。...

SELECT USERNAME, FULLNAME, DEPARTMENT, TASKNAME 
  FROM USERDB t1 
  JOIN USERDB_TASKS t3 ON t1.USERID=t3.USERID 
  JOIN TASKS t2 ON t3.TASKSID=t2.TASKSID;

表USERDB包含列名USERID,USERNAME,FULLNAME和DEPARTMENT。表USERDB_TASKS包含列名USERID,TASKSID。表TASKS包含列名称TASKSID,TASKNAME。对于特定用户,USERID在所有表中都相同。同样,特定任务的TASKSID在所有表中都相同。

我得到以下格式的输出:

USERNAME FULLNAME     DEPARTMENT TASKNAME
duryo    dur yogeli   IT         Domain admin
duryo    dur yogeli   IT         Session user
rected   rec tedenson SALES      Process manager
rected   rec tedenson SALES      DBA user
rected   rec tedenson SALES      Flow coordinator 
................................................

我的意思是对于同一用户,最后一列有多个任务名称。

我要创建的输出格式如下...

USERNAME FULLNAME     DEPARTMENT TASKNAME
duryo    dur yogeli   IT         Domain admin, Session user
rected   rec tedenson SALES      Process manager, DBA user, Flow coordinator

尽管我有一个批处理脚本,该脚本在生成文件中的输出后会为我执行此格式化,但如果可能的话,我想使用oracle查询本身来生成格式化的输出。

任何线索将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

尝试使用LISTAGG

SELECT
    USERNAME,
    FULLNAME,
    DEPARTMENT,
    LISTAGG(TASKNAME, ', ') WITHIN GROUP (ORDER BY TASKNAME) TASKNAME
FROM yourTable
GROUP BY
    USERNAME,
    FULLNAME,
    DEPARTMENT;

enter image description here

Demo