我的SQL查询数据安排

时间:2013-07-23 21:01:58

标签: mysql

假设我有一个mysql查询,导致以下行。

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

请注意,所有列栏中的数据第二个是相同的。 我的问题:有没有办法通过查询来获得这种形式的结果

col1data col3data col4data col2data1 col2data2 col2data3  

将不同的数据放在同一行?

2 个答案:

答案 0 :(得分:2)

如果您希望将col2中的记录合并为单个分隔字符串,则可以使用MySQL的GROUP_CONCAT()函数表进行分组

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

sqlfiddle上查看。

答案 1 :(得分: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()的使用允许您在连接在一起后从列表中提取元素。