假设我有一个mysql查询,导致以下行。
col1data col2data1 col3data col4data
col1data col2data2 col3data col4data
col1data col2data3 col3data col4data
请注意,所有列栏中的数据第二个是相同的。 我的问题:有没有办法通过查询来获得这种形式的结果
col1data col3data col4data col2data1 col2data2 col2data3
将不同的数据放在同一行?
答案 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()
的使用允许您在连接在一起后从列表中提取元素。