如果我在MySQL中有一个包含以下数据的表:
id Name Value
1 A 4
1 A 5
1 B 8
2 C 9如何将其转换为以下格式?
id Column
1 A:4,5,B:8
2 C:9我想我必须使用GROUP_CONCAT。但我不确定它是如何工作的。
发布于 2012-11-19 18:33:12
select id, group_concat(`Name` separator ',') as `ColumnName`
from
(
select
id,
concat(`Name`, ':', group_concat(`Value` separator ',')) as `Name`
from mytbl
group by
id,
`Name`
) tbl
group by id;你可以在这里看到它的实现:。这正是你需要的。
更新拆分分两步进行。首先,我们得到一个表,表中所有的值(用逗号分隔)都对应一个uniqueName,id。然后,从获得的表中,我们将所有名称和值作为每个唯一id的单个值,请参阅此处解释的 (向下滚动,因为它有两个结果集)
编辑阅读问题时出错,我只按id分组。但在以下情况下需要两个group_contacts (值将连接在一起,按名称和id分组,然后按id分组)。之前的答案是
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id你可以在这里看到它的实现:
发布于 2012-11-19 18:20:56
尝试:
CREATE TABLE test (
ID INTEGER,
NAME VARCHAR (50),
VALUE INTEGER
);
INSERT INTO test VALUES (1, 'A', 4);
INSERT INTO test VALUES (1, 'A', 5);
INSERT INTO test VALUES (1, 'B', 8);
INSERT INTO test VALUES (2, 'C', 9);
SELECT ID, GROUP_CONCAT(NAME ORDER BY NAME ASC SEPARATOR ',')
FROM (
SELECT ID, CONCAT(NAME, ':', GROUP_CONCAT(VALUE ORDER BY VALUE ASC SEPARATOR ',')) AS NAME
FROM test
GROUP BY ID, NAME
) AS A
GROUP BY ID;SQL Fiddle:http://sqlfiddle.com/#!2/b5abe/9/0
发布于 2014-12-22 21:20:36
SELECT ID, GROUP_CONCAT(CONCAT_WS(':', NAME, VALUE) SEPARATOR ',') AS Result
FROM test GROUP BY IDhttps://stackoverflow.com/questions/13451605
复制相似问题