-1

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

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

请注意,第二个所有列中的数据是相同的。我的问题:有什么方法可以通过查询获得这种形式的结果

col1data col3data col4data col2data1 col2data2 col2data3  

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

4

2 回答 2

2

如果要将记录col2组合​​成单个分隔字符串,可以使用 MySQL 的函数对表进行分组:GROUP_CONCAT()

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

sqlfiddle上查看。

于 2013-07-23T21:05:21.523 回答
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()允许您在将元素连接在一起后从列表中提取元素。

于 2013-07-23T21:07:47.700 回答