2017-07-24 107 views
0

什麼是我需要實現給該表下方的結果MySQL的:多個SQL行合併成單行如果ID是相同

表:

+----+-------+-------------- 
| name| id | items | vol 
+----+-------+--------------- 
| A | 1111 | 4  | 170 
| A | 1111 | 5  | 100 
| B | 2222 | 6  | 200 
| B | 2222 | 7  | 120 
+----+-------+----------------- 

由上表是聯盟的結果查詢

SELECT * FROM imports 
union all 
SELECT * FROM exports 
ORDER BY name; 

我希望創建一個看起來像這樣

慾望臨時視圖d結果:

+----+---------+---------+------------------- 
| name| id  | items | vol | items1 | vol2 
+-----+--------+-------+-------------------- 
| A | 1111 | 4 | 170 | 5 | 100 
| B | 2222 | 6 | 200 | 7 | 120 
+----+---------+---------+------------------- 

任何幫助將不勝感激! -Thanks

+0

這不是偉大的,說:「這裏有一些數據,是由UNION查詢準備,我怎麼能讓它看起來像......「,因爲我們無法確定源數據的外觀,我們需要知道,因爲它影響我們的回答。這就好像在說「如果答案是4,問題是什麼?」 - 可能是1 + 3,2 + 2,5-1等...請分割您的問題,以顯示進口數據和出口數據SEPARATELY –

回答

0

使用PIVOT:

SELECT name,id, 
     SUM(CASE WHEN typ = 'imports' THEN items ELSE 0 END) as imports_items, 
     SUM(CASE WHEN typ = 'imports' THEN vol ELSE 0 END) as imports_vol, 
     SUM(CASE WHEN typ = 'exports' THEN items ELSE 0 END) as exports_items, 
     SUM(CASE WHEN typ = 'exports' THEN vol ELSE 0 END) as exports_vol 
FROM (
    SELECT 'imports' as typ, t.* FROM imports t 
    union all 
    SELECT 'exports' as typ, t.* FROM exports t 
) x 
GROUP BY name,id 
ORDER BY name; 
+0

嗯,嚴格來說,不使用樞軸,但它實現同樣的結果! –

+0

謝謝krokodilko! – michael

0

這應該給你你正在尋找的表:

SELECT 
     a.name, 
     a.id, 
     a.items, 
     a.vol, 
     b.items as items2, 
     b.vol as vol2 
    FROM imports a 
     INNER JOIN exports b on b.id = a.id;