我有一个包含 2 列的表格,第一列称为 ID
,第二列称为 TRACKING
。 ID
列有重复项,我想获取所有这些重复项并将它们合并到一行中,其中重复行中的 TRACKING
中的每个值都放入新列中在同一行中,我不再有重复项。
我尝试了一些建议的方法,其中所有值都将连接到一列中,但我希望重复的 ID
的这些 TRACKING
值单独存在列。下面的代码没有达到我的预期目的。
SELECT ID, TRACKING =
STUFF((SELECT DISTINCT ', ' + TRACKING
FROM #t b
WHERE b.ID = a.ID
FOR XML PATH('')), 1, 2, '')
FROM #t a
GROUP BY ID
我想要这个:
| ID | TRACKING |
-----------------
| 5 | 13t3in3i |
| 5 | g13g13gg |
| 3 | egqegqgq |
| 2 | 14y2y24y |
| 2 | 42yy44yy |
| 5 | 8i535i35 |
把它变成这样:
| ID | TRACKING | TRACKING1 | TRACKING2 |
-----------------
| 5 | 13t3in3i | g13g13gg | 8i535i35 |
| 3 | egqegqgq | | |
| 2 | 14y2y24y | 42yy44yy | |
最佳答案
在 MySQL 中执行此操作的(相对)痛苦的方法是使用相关子查询:
select i.id,
(select t.tracking
from t
where t.id = i.id
order by t.tracking
limit 1, 0
) as tracking_1,
(select t.tracking
from t
where t.id = i.id
order by t.tracking
limit 1, 1
) as tracking_2,
(select t.tracking
from t
where t.id = i.id
order by t.tracking
limit 1, 2
) as tracking_3
from (select distinct id from t
) i;
尽管看起来很糟糕,但在(id,tracking)上建立索引
时,它可能会具有令人惊讶的良好性能。
顺便说一句,您使用 stuff()
的原始代码会将所有内容放入一列中:
select id, group_concat(tracking)
from t
group by id;
关于mysql - 根据sql中重复的列ID为重复行值创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58000216/