不同的行在单独的列SQL中

时间:2013-03-08 13:47:39

标签: sql pivot

我正在研究一个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

的地方

我已经尝试了几种方法,但我做不到。

任何人都知道如何做到这一点?

1 个答案:

答案 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

请参阅SQL Fiddle with Demo