我正在研究一个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 etc
的地方我已经尝试了几种方法,但我做不到。
任何人都知道如何做到这一点?
答案 0 :(得分:1)
此类数据转换称为 pivot 。某些数据库具有可以将行转换为列的数据透视功能。
如果您没有透视功能,那么您也可以使用带有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