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 に答える