将多列转换为行 - MySQL

时间:2015-08-19 01:54:35

标签: mysql sql stored-procedures

我有很多需要迁移到新表的数据。但是,表结构已更改。

所以我的问题是,我需要构建一个MySQL查询,或者SProc,它将实现以下目的:

我目前的数据集如下:

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将不会重复。那就是Profile>性别>男性和简介>孩子>性别>男性,将由uuid有6条记录,而不是7条记录。 uuids将是独一无二的。

注意:有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

对此有任何帮助,会很棒!

由于

1 个答案:

答案 0 :(得分:0)

您可以使用union

执行此操作
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将删除重复项。