2014-10-30 102 views
4

我是新來的postgreSQL。我的目標是運行一個查詢,該查詢返回列出的每個proposal_id的所有item_id,其中每個唯一的proposal_id是單獨的行條目,並且每個item_id都是該行條目中的列。將postgreSQL中的多行組合成一行?

表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 

的挑戰是,我可以有相同的PROPOSAL_ID對之間的任何1及以上到11個或更多的條目。

這是用於提出這個問題的簡化版本。一旦我指出了這一點,我的計劃是在這裏從其他表中爲每個item_id和proposal_id加入其他數據。

任何幫助非常感謝。

謝謝!

編輯:固定臺美學

+0

我想加入額外的數據將與您現有的表的設計更加容易。你能告訴我們你想加入什麼嗎? – cha 2014-10-30 22:31:40

+0

在相同的proposal_id內,item_id的順序是否重要?如果是的話,你可能應該在同一個proposal_id – Alexandros 2014-10-30 22:47:38

回答

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

+0

內添加一個額外的字段謝謝 - 這真的很有幫助。 好奇,爲什麼在那裏有一個「z」? – 2014-10-31 00:29:01

+0

from子句中的子查詢必須具有別名。我不知道爲什麼z :) – klin 2014-10-31 02:27:31