合并多个列值并根据ID将其分组

时间:2020-09-23 12:30:14

标签: sql oracle listagg

我的数据表如下:

",".join("15, 14, 12, 9, 5".split()[::-1]).replace(",,",",")

说我想创建一个新列,为不同的用户提供逗号分隔符。

我希望最终看起来像这样

    ╔════════╦══════════════╦════════════╦
    ║BatchID ║ CreateUser   ║ ChangeUser ║         
    ╠════════╬══════════════╬════════════╬
    ║      1 ║ xxx          ║    yyy     ║ 
    ║      1 ║ zzz          ║    zzz     ║
    ║      2 ║ aaa          ║    aaa     ║
    ║      3 ║ bbb          ║    Null    ║
    ║      4 ║ ccc          ║    ddd     ║                              
    ╚════════╩══════════════╩════════════╩

我应该如何编写查询?

1 个答案:

答案 0 :(得分:0)

您可以使用LISTAGG功能-

SELECT BatchID , LISTAGG(CreateUser, ',') UserName
  FROM (SELECT BatchID, CreateUser
          FROM YOUR_TAB
         WHERE CreateUser IS NOT NULL
        UNION
        SELECT BatchID, ChangeUser
          FROM YOUR_TAB
         WHERE ChangeUser IS NOT NULL)
GROUP BY BatchID