2013-07-23 50 views
-1

假設我有一個mysql查詢導致以下幾行。我的SQL查詢數據安排

col1data col2data1 col3data col4data 
col1data col2data2 col3data col4data 
col1data col2data3 col3data col4data 

請注意,第二個所有列欄中的數據是相同的。 我的問題:是否有通過查詢任何方式在這種形式

col1data col3data col4data col2data1 col2data2 col2data3 

放在同一行中的不同數據的結果?

回答

2

如果你想從col2記錄合併成一個單一的分隔字符串,可以使用MySQL的GROUP_CONCAT()功能表:

SELECT col1, col3, col4, GROUP_CONCAT(col2) 
FROM  my_table 
GROUP BY col1, col3, col4 

看到它的sqlfiddle

+0

OK現在,如果我的數據是這樣的 CREATE TABLE MY_TABLE( COL1 VARCHAR(255), COL2 VARCHAR(255), COL3 VARCHAR(255), COL4 VARCHAR(255) ); \t INSERT INTO MY_TABLE (COL1,COL2,COL3,COL4) VALUES ( '一個', 'col2data1', 'AA', 'AAA'), ( '一個', 'col2data2', 'AA' ''','a2'), ('a','col2data3','aa','aaa'), ('b','col2data11','bb','bbb'), 'col2data22','bb','bbb'), ('b','col2data33','bb','bbb') ; 想象更多的行。 – Joseph

+0

@ user2515601:然後,上面的查詢將返回每個不同的'(col1,col3,col4)'組合的結果。 – eggyal

+0

謝謝你好先生! – Joseph

1

真正的問題是:你知道col2data有多少值嗎?

的規範答案是使用group_concat()得到的值:

select col1data, col3data, col4data, group_concat(col2data) 
from t 
group by col1data, col3data, col4data; 

這將創建一個逗號分隔的列表。你可能會看中,幷包括空格,而不是逗號:

select col1data, col3data, col4data, group_concat(col2data separator ' ') 
from t 
group by col1data, col3data, col4data; 

但是,這仍然只產生四列。

如果你想爲你知道電話號碼每一個一個單獨的列,可以在group_concat()使用一招:

select col1data, col3data, col4data, 
     substring_index(group_concat(col2data order by col2data), ',', 1), 
     substring_index(substring_index(group_concat(col2data order by col2data), ',', 2), ',', -1), 
     substring_index(substring_index(group_concat(col2data order by col2data), ',', 3), ',', -1), 
from t 
group by col1data, col3data, col4data; 

採用substring_index()讓你後提取從列表中的元素它們連接在一起。

+0

但這會大大影響執行時間嗎? :( – Joseph

+0

@ user2515601 ......哪一個?所有這些在執行時間應該是非常相似的。一個group by的時間確實在聚合步驟中比「calculate the functions」步驟更多。 –