将postgreSQL中的多行组合成一行?

时间:2014-10-30 22:24:15

标签: sql postgresql pivot

我是postgreSQL的新手。我的目标是运行一个查询,该查询返回为每个proposal_id列出的所有item_id,其中每个唯一的proposal_id是一个单独的行条目,每个item_id是该行条目中的一列。

表1数据如下:

proposal_id    item_id  

1              83054
1              81048
2              71384
2              24282
2              19847
2              18482
3              84720
4              18081
4              73018

这就是我想要的样子:

proposal_id     item_id_1     item_id_2    item_id_3    item_id_4    item_id_n
1                  83054      81048
2                  71384      24282        19847        18482
3                  84720
4                  18081      73018

挑战在于我可以在1到11个或更多条目之间拥有相同的proposal_id。

这是一个简化版本,用于提出这个问题。一旦我确定了这一点,我的计划就是为这里的其他表格中的每个item_id和proposal_id加入其他数据。

任何帮助非常感谢。

谢谢!

已编辑:固定桌面美学

1 个答案:

答案 0 :(得分:6)

首先,确定您需要的列数:

select proposal_id, array_length(array_agg(item_id), 1)
    from the_table
    group by 1
    order by 2 desc
    limit 1

接下来,使用足够数量的

执行以下查询。

select proposal_id, a[1] id1, a[2] id2, a[3] id3, a[4] id4
from (
    select proposal_id, array_agg(item_id) a
    from the_table
    group by 1
    order by 1) z

SQLFiddle