如何将一个代码添加到一列中的不同列?

时间:2014-02-18 17:01:59

标签: oracle

id    text 
 1     hi
 1     how are u
 1     fine ?
 2     rad
 2     qey
 3

我正在搜索一个查询,它可以让我将id = 1插入一列中的另一个表

  id   test
  1     hi how are you fine ?
  2     rad qey

使用listagg函数,我会得到这样的结果:你好,你好吗? ..我可以这样吗 喜
你好吗? 好吗?

2 个答案:

答案 0 :(得分:1)

此查询可用于实现您的结果:

WITH tab(id,text) AS (
 SELECT 1, 'hi' FROM dual UNION ALL
 SELECT 1, 'how are u' FROM dual UNION ALL
 SELECT 1, 'fine ?' FROM dual UNION ALL
 SELECT 2, 'rad' FROM dual UNION ALL
 SELECT 2, 'qey' FROM dual UNION ALL
 SELECT 3, NULL FROM dual)
-----
--End of data
-----
SELECT ID, 
       listagg(text, ' ') within GROUP (ORDER BY ROWNUM) AS text
  FROM tab
 GROUP BY ID;

输出

ID  TEXT
1   hi how are u fine ?
2   rad qey
3   

但是有一个问题,虽然使用了rownum的顺序,但你不能保证文本的顺序,最好在你的表中再添一个可以定义文本顺序的列,如下所示

id    text         order_text 
 1     hi          1
 1     how are u   2
 1     fine ?      3
 2     rad         1
 2     qey         2
 3                 1

并将查询用作

SELECT ID, 
       listagg(text, ' ') within GROUP (ORDER BY order_text) AS text
  FROM tab
  GROUP BY ID;

答案 1 :(得分:-1)

您可以尝试使用LISTAGG功能。 有关详细信息,请see here.