0

我有一个包含 ID 和位置列的表,我正在尝试将多行组合成逗号分隔的列表。例如:

Source table:   ID    Location      Name
                 1        USA       Bob 
                 1        Brazil    Bob
                 1        Russia    Bob
                 2        India     Emily
                 2        China     Emily

我的目标表应该得到这样的值

Target table:   ID    Location             Name
                 1     USA, Brail, Russia  Bob
                 2     India, China        Emily

如何使用 oracle 11g R2 执行此操作?

4

1 回答 1

1

您可以使用listagg()

select id, listagg(location, ', ') within group (order by id) as location
from source
group by id

这不保证表中的原始顺序。SQL 表本质上是无序的,因此为了保证这一点,您需要为每一行设置一个不同的行 ID。以下可能会接近:

select id, listagg(location, ', ') within group (order by seqnum) as location
from (select *, rownum as seqnum from source) s
group by id
于 2013-04-04T17:32:47.720 回答