将行合并为一个结果,并在SQL中将结果添加为不同的值

时间:2013-05-23 16:31:44

标签: sql postgresql

我有一张桌子(人),其中包含以下信息:

  id  cert_id  type    name 
  1     123    owner   Paul
  2     123    seller  George
  3     123    buyer   steve
  4     456    owner   micheal

我还有一个表(项目),其中包括以下内容:

id  cert_id  item_name     
1     123    staples
2     123    cheese
3     123    iguanas
4     456    pie

基本上,我想要做的是得到如下结果:

cert_id  owner_name  seller_name  buyer_name  item_name 
  123    Paul        George       steve       staples, cheese, iquanas
  456    micheal                              pie

到目前为止,我已经能够使用MAX(CASE WHEN people.type='owner' THEN people.name END) AS owner_name,但是我无法将卖家名称附加到另一行('我不确定这是否可以通过SQL语句或者我应该做些什么之后对结果进行格式化。任何关于组合行的建议都会有所帮助,或者简单的“不可能”会让我知道这些限制是什么。

提前致谢!

2 个答案:

答案 0 :(得分:6)

您应该能够使用以下查询来获得结果:

select p.cert_id,
  max(case when p.type = 'owner' then p.name end) owner_name,
  max(case when p.type = 'seller' then p.name end) seller_name,
  max(case when p.type = 'buyer' then p.name end) buyer_name,
  array_agg(distinct i.item_name) Items
from people p
inner join items i
  on p.cert_id = i.cert_id
group by p.cert_id;

请参阅SQL Fiddle with Demo

答案 1 :(得分:-1)

这可以使用INNER JOIN或LEFT-OUTER-JOIN ...

来完成