4

私は、データベースからさまざまな列にさまざまな行を取得するSQLステートメントに取り組んでいます。

db1:

id  | name
1   | Shoe
2   | Jacket

db2:

id |  type  | image
1  |  0     | image_1_1.jpg
1  |  1     | image_1_2.jpg
1  |  2     | image_1_3.jpg
2  |  0     | image_2_1.jpg

出力は

id  | name   | image0        |  image1         | image2
1   | Shoe   | image_1_1.jpg |  image_1_2.jpg  | image_1_3.jpg
2   | Jacket | image_2_1.jpg |                 |

image0はtype=0の場合image1はtype=1の場合など

私はいくつかの方法でそれを試しましたが、私はそれを正しく理解することができません。

誰もがこれを行う方法を知っていますか?

4

1 に答える 1

1

このタイプのデータ変換は、ピボットと呼ばれます。一部のデータベースには、行を列に変換できるピボット関数があります。

ピボット関数がない場合は、CASE式を含む集計関数を使用して結果を取得することもできます。

select t1.id,
  t1.name,
  max(case when t2.`type` = 0 then t2.image else '' end) Image0,
  max(case when t2.`type` = 1 then t2.image else '' end) Image1,
  max(case when t2.`type` = 2 then t2.image else '' end) Image2
from table1 t1
inner join table2 t2
  on t1.id = t2.id
group by t1.id,  t1.name

SQL FiddlewithDemoを参照してください

于 2013-03-08T13:51:40.810 に答える