MySQL从一列添加值,但每行添加各行一列

时间:2017-02-13 21:04:03

标签: mysql

我试图将一个列添加到SQL表中。 该表包含对象发布人员。该对象不是唯一的,但时间戳是。 我想为每个对象添加一列,其中包含每行也发布该对象的人员的姓名。

+-------+-------+--------+
| ID    | name  | timeXX |
+-------+-------+--------+
| ID001 | name1 | timeXX |
| ID001 | name2 | timeXY |
| ID001 | name1 | timeYX |
| ID002 | name2 | timeZX |
| ID002 | name1 | timeYZ |
| ID002 | name3 | timeXZ |
| ID002 | name1 | timeZZ |
+-------+-------+--------+

我想最终得到像

这样的东西
+-------+-------+--------+---------------+
| ID    | name  | time   | grouped_name  |
+-------+-------+--------+---------------+
| ID001 | name1 | timeXX | name2         |
| ID001 | name2 | timeXY | name1         |
| ID001 | name1 | timeYX | name2         |
| ID002 | name2 | timeZX | name1, name3  |
| ID002 | name1 | timeYZ | name2, name3  |
| ID002 | name3 | timeXZ | name1, name2  |
| ID002 | name1 | timeZZ | name2, name3  |
+-------+-------+--------+---------------+

这是可能的吗?如果是这样,怎么样?我很想知道!

感谢您的帮助,问候,

路德

2 个答案:

答案 0 :(得分:0)

试试这个:

select t.id,t.name,t.time,(
select group_concat(DISTINCT t2.name separator ',')
from times t2 where t2.id=t.id  AND (t.time like concat('%',substring(REPLACE (t2.time,'time', ''),1,1),'%')
OR t.time like concat('%',substring(REPLACE (t2.time,'time', ''),2,1),'%')) AND t2.name<>t.name
group by t2.id 
) as time_group from times t

答案 1 :(得分:0)

感谢您的回应和反馈。它对我帮助很大。

目前我在以下解决方案中找到了答案。不完全是我想要的结果,但我可以用。

SELECT * ,GROUP_CONCAT(DISTINCT `name`) AS `grouped_name` FROM table GROUP BY `time`

为了获得最佳效果,我想从grouped_name中减去grouped_name添加到的行的名称。

但是现在这个效果还不错。我想我最初的问题是不够清楚,因为我将我的问题翻译成英文并做了我没有完全进入(mySQL)的东西。

非常感谢!

此致

路德