以下のクエリは標準SQLを使用してこのようなピボットを生成します。
また、MySQLで動作する必要があります。
これはJohnHCの回答の表レイアウトに基づいています。
(とにかくそのようなことをするでしょう。マッピングテーブルを使用すると、共通の非正規化方式である。)
select c.ComponentName
,max(case when p.ProductName = 'Chair X' then 'x' else ' ' end) as Chair_X
,max(case when p.ProductName = 'Chair Y' then 'x' else ' ' end) as Chair_Y
,max(case when p.ProductName = 'Chair Z' then 'x' else ' ' end) as Chair_Z
,max(case when p.ProductName = 'Spare Set A' then 'x' else ' ' end) as Spare_set_A
,max(case when p.ProductName = 'Spare Set B' then 'x' else ' ' end) as Spare_set_B
,max(case when p.ProductName = 'Spare Set C' then 'x' else ' ' end) as Spare_set_C
from ProductComponent pc
inner join Products p on (pc.ProductID = p.ProductID)
left join Components c on (pc.ComponentID = c.ComponentID)
where (p.ProductName like 'Chair %' or p.ProductName like 'Spare Set %')
group by c.ComponentName
order by c.ComponentName;
学校の割り当て?何を試しましたか? – jarlh
1つのテーブルを使用するのがこの問題を解決する最善の方法ではないかもしれません。あなたは間違いなくお互いに関連している複数のテーブルが必要になります。 – Fleuv
@jarlh、それはインターンシップのためです。私は2つのテーブルを組み合わせることはできません。 – Jur