如何使用oracle中的listagg()函数连接2个具有空值的行

时间:2014-10-29 10:52:32

标签: oracle oracle11g oracle10g

1234    NULL
1234    HELLO EVERYBODY
7895    NULL

我希望结果像

1234  hello everybody,null
7895  null

我已经尝试在oracle中使用listagg(nvl(col,' NULL')),但它没有用。 请帮帮我。

1 个答案:

答案 0 :(得分:1)

SQL> WITH DATA AS(
  2  SELECT 1234 ID,   NULL txt FROM dual UNION ALL
  3  SELECT 1234 ID,   'HELLO EVERYBODY' txt FROM dual UNION ALL
  4  SELECT 7895 ID,   NULL txt FROM dual)
  5  SELECT ID, LISTAGG(nvl(txt,'NULL'), ',')
  6            WITHIN GROUP (ORDER BY ID) list_agg
  7  FROM DATA
  8  GROUP BY ID
  9  /

                  ID LIST_AGG
-------------------- ------------------------------
                1234 HELLO EVERYBODY,NULL
                7895 NULL

SQL>

编辑 WITH子句是为了演示而构建示例表。在您的数据库中,您只需使用DATA重命名table name,然后执行select listagg..查询。

所以,你的最终查询看起来像,

SELECT column_1, 
       LISTAGG(nvl(column_2,'NULL'), ',')
       WITHIN GROUP (ORDER BY column_1) list_agg
FROM table_name
GROUP BY column_1
/