4

我正在研究一条 SQL 语句,它将数据库中的不同行放入不同的列中。

数据库1:

id  | name
1   | Shoe
2   | Jacket

数据库2:

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 Fiddle

于 2013-03-08T13:51:40.810 回答