2015-06-09 48 views
0

我有一個表,這個結構:SQL - 如何把兩個記錄同桌的旁邊同一行

+------------+-----------------+----------+ 
| xreference |  title  | language | 
+------------+-----------------+----------+ 

我想通過一個SQL查詢來獲取這樣的事情:

+------------+---------------+-----------------+--------------+--------------+ 
| xreference | title_eng | title_ita | language_eng | language_ita | 
+------------+---------------+-----------------+--------------+--------------+ 

我該如何獲得這種結構?有一種方法可以組織同一行中同一個表的兩個記錄?

舉例來說,如果我有這樣的數據:

+------------+-----------------+----------+ 
| xreference |  title  | language | 
+------------+-----------------+----------+ 
|   1 | example_title | eng  | 
|   1 | example_title_2 | ita  | 
+------------+-----------------+----------+ 

我想獲得這樣的事:

+------------+---------------+-----------------+--------------+--------------+ 
| xreference | title_eng | title_ita | language_eng | language_ita | 
+------------+---------------+-----------------+--------------+--------------+ 
|   1 | example_title | example_title_2 | eng   | ita   | 
+------------+---------------+-----------------+--------------+--------------+ 
+0

我不明白你的表格佈局,你可以嘗試通過改進它[這](http://ozh.github.io/ascii -tables /)? – marijnz0r

+0

[MySQL數據透視表]可能的重複(http://stackoverflow.com/questions/7674786/mysql-pivot-table) –

+2

這聽起來像你正在尋找一個自我加入:http://stackoverflow.com/questions/2458519 /自我解釋的解釋 –

回答

2

你的情況,最簡單的方法可能是有條件的聚集:

select xreference, 
     max(case when language = 'eng' then title end) as title_eng, 
     max(case when language = 'ita' then title end) as title_ita, 
     'eng' as language_eng, 'ita' as language_ita 
from thisdata t 
group by xreference; 

我不確定最後兩列應該做什麼。

該方法優於使用join的優點是雙重的。首先,添加新語言很容易。並且,這將顯示全部xreference值,即使那些沒有英文和/或意大利文翻譯的文件。

+0

我希望存儲在我的表中的所有值不僅是最大值(或最小值或計數)。沒有這些運算符可以執行這種條件聚合嗎? – madmad

+0

@madmad,這會給你最大的一個值,即唯一的價值! – jarlh

+0

@madmad。 。 。這假設每個'xreference'至多有一個英文標題和至多一個意大利標題。如果不是這樣,你可能需要'group_concat()'。 –

0

做一個自我加入,但沒有再選擇:

SELECT t1.title as title_eng, t2.title as title_ita 
from table1 t1 
join table2 t2 on (t2.xreference = t1.xreference) 
where t1.language = 'eng' and t2.language = 'ita' 
+0

只是一個評論,這隻會返回具有英語和意大利語的xreference。如果缺少一種語言,則不會返回任何內容。 – jarlh

+0

當然。他可以使用外部連接,具體取決於他想要獲得的內容。 –

+0

太糟糕了MySQL沒有完整的外連接。 – jarlh

相關問題