我有很多数据需要迁移到新表。但是,表结构发生了变化。
所以我的问题是,我需要构建一个 MySQL 查询或 SPproc,它将实现以下目标:
我目前的数据集如下:
uuid level0 level1 level2
FFC28DA7-9753-4D83-BAFF-A3623EAF6545 Insurance
2A772655-E580-40BC-B08F-4D279AEEEC74 Profile Age_Group 25-34
2A772655-E580-40BC-B08F-4D279AEEEC74 Profile Gender M
2A772655-E580-40BC-B08F-4D279AEEEC74 Profile State NSW
2A772655-E580-40BC-B08F-4D279AEEEC74 Profile Country AU
821B10BC-EED7-4E72-A77D-5119A2C28331 Profile Age_Group 25-34
821B10BC-EED7-4E72-A77D-5119A2C28331 Profile Gender M
FFC28DA7-9753-4D83-BAFF-A3623EAF6545 Insurance Health
这样的记录有很多。
但是现在需要将数据迁移到新表中,因此看上面的数据集,需要是这样的
uuid taxid_n
FFC28DA7-9753-4D83-BAFF-A3623EAF6545 Insurance
FFC28DA7-9753-4D83-BAFF-A3623EAF6545 Health
2A772655-E580-40BC-B08F-4D279AEEEC74 Profile
2A772655-E580-40BC-B08F-4D279AEEEC74 Age_Group
2A772655-E580-40BC-B08F-4D279AEEEC74 25-34
2A772655-E580-40BC-B08F-4D279AEEEC74 Gender
2A772655-E580-40BC-B08F-4D279AEEEC74 M
2A772655-E580-40BC-B08F-4D279AEEEC74 State
2A772655-E580-40BC-B08F-4D279AEEEC74 NSW
2A772655-E580-40BC-B08F-4D279AEEEC74 Country
2A772655-E580-40BC-B08F-4D279AEEEC74 AU
821B10BC-EED7-4E72-A77D-5119A2C28331 Profile
821B10BC-EED7-4E72-A77D-5119A2C28331 Age_Group
821B10BC-EED7-4E72-A77D-5119A2C28331 25-34
821B10BC-EED7-4E72-A77D-5119A2C28331 Gender
821B10BC-EED7-4E72-A77D-5119A2C28331 M
所以基本上,每个级别都会是一个新行,加上父级别level0,不会重复。即“个人资料”>“性别”>“男性”和“个人资料”>“ child ”>“性别”>“男性”,根据 uuid,将有 6 条记录,而不是 7 条。 uuid 将是唯一的。
注意:有 6 个级别,即 level0 - level5,因此查询或 SProc 应该容纳它。
获取原始数据的查询是:
SELECT
uuid,
level0, level1,
level2, level3,
level4, level5,
level6, pubid,
siteid, ipaddress,
dt, status,
created, now ()
FROM
segmentdata
WHERE
status = 1
对此的任何帮助都会很棒!
谢谢
最佳答案
您可以使用联合
来做到这一点
select uid, level0 as level from segmentdata
union
select uid, level1 from segmentdata
union
select uid, level2 from segmentdata
union
select uid, level3 from segmentdata
union
select uid, level4 from segmentdata
union
select uid, level5 from segmentdata;
union
将删除重复项。
关于mysql - 将多列转置为行 - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085322/