gpt4 book ai didi

mysql - 根据sql中重复的列ID为重复行值创建新列

转载 作者:行者123 更新时间:2023-11-29 15:38:11 25 4
gpt4 key购买 nike

我有一个包含 2 列的表格,第一列称为 ID,第二列称为 TRACKINGID 列有重复项,我想获取所有这些重复项并将它们合并到一行中,其中重复行中的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com