[oracle]LISTAGG 函数具有两个列

标签: oracle11g Oracle
发布时间: 2017/4/15 18:49:54
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一张桌子就像这 (报告)

--------------------------------------------------
|  user_id |  Department | Position  | Record_id |
--------------------------------------------------
|  1       |  Science    | Professor |  1001     |
|  1       |  Maths      |           |  1002     |
|  1       |  History    | Teacher   |  1003     |
|  2       |  Science    | Professor |  1004     |
|  2       |  Chemistry  | Assistant |  1005     |
--------------------------------------------------

我想有以下结果

   ---------------------------------------------------------
   | user_id  |  Department+Position                       |
   ---------------------------------------------------------
   |  1       | Science,Professor;Maths, ; History,Teacher |
   |  2       | Science, Professor; Chemistry, Assistant   |
   ---------------------------------------------------------

这意味着我需要保留空的空间作为 ' 正如你可以看到在结果表中。 现在我知道如何使用 LISTAGG 函数,但只为一列。然而,我无法确切地弄的出如何为两个列,同时。这里是我的查询︰

SELECT user_id, LISTAGG(department, ';') WITHIN GROUP (ORDER BY record_id)
FROM report

谢谢你提前:-)

解决方法 1:

它只是需要明智地使用串联在聚合︰

select user_id
     , listagg(department || ',' || nvl(position, ' '), '; ')
        within group ( order by record_id )
  from report

即聚合的 concatentation department 用逗号和 position 和替换 position 与空间,如果它为 NULL。

官方微信
官方QQ群
31647020