2013-03-08 35 views
4

我正在處理一條SQL語句,該語句從數據庫獲取不同的行到不同的列。單列中的不同行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等

我嘗試過幾種方法,但我無法做到。

任何人都知道如何做到這一點?

+5

歡迎堆棧溢出!請通過添加適當的標記(Oracle,SQL Server,MySQL等)來指定您要定位的RDBMS。可能會有利用不被普遍支持的語言或產品功能的答案。此外,通過使用特定的RDBMS標記它,您的問題可能會得到更適合回答的人的關注。 – Taryn 2013-03-08 13:48:37

+1

你要做的就是調用表格。一些RDBMS內置了對它的支持。 – dasblinkenlight 2013-03-08 13:49:32

回答

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 with Demo