4

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

  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 语句实现,或者我是否应该在之后对结果进行一些格式化。任何建议组合行会很有帮助,或者一个简单的“不可能”会让我知道限制是什么。

提前致谢!

4

2 回答 2

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

于 2013-05-23T16:46:41.377 回答
-1

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

于 2015-02-01T08:45:30.983 回答