如何将行连接成单个文本字符串?

时间:2014-05-27 15:13:44

标签: sql oracle function select

这是我在StackOverflow中的第一个问题,我希望得到你的帮助。

我需要一个查询,该查询返回一个字符串,其中所有用户的分数连接在一起,按用户名分组。我将尝试举例说明:

username          score
John421             4028
Robin                  5392
Ninaww              2234
Robin                  4631
Robin                  2792
John421             8924

查询应返回:

username          all_scores
John421            '4028,8924'
Robin                 '5392,4631,2792'
Ninaww             '2234'

希望有人能帮助我,并提前致谢! :)

2 个答案:

答案 0 :(得分:0)

使用oracle listagg()聚合函数,如下所述:

http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php

例如,

select username, listagg(score, ',') within group (order by score) as all_scores
from mytable
group by username

答案 1 :(得分:0)

这里应该使用listagg函数。可以使用此函数的分析版本或组集版本。

由于想要按用户名汇总结果,因此群组版本似乎是正确的选择。

- 标识该组(此处为用户名)。

- 识别分隔符,&#39 ;; '

- 识别分数的分类。例如得分)

SELECT username,
       LISTAGG(score, '; ') WITHIN GROUP (ORDER BY score) all_scores 
  FROM user_scores 
  GROUP BY username 
  ORDER BY username;