我有以下的数据集(样本):MySQL的 - 重塑数据
emplid | Citizeship |
100001 | USA |
100001 | CAN |
100001 | CHN |
100002 | USA |
100002 | CHN |
100003 | USA |
有没有办法把数据转化成如下:
emplid | Citizeship_1 | Citizenship_2 | Citizenship_3
100001 | USA | CHN | CAN
100002 | USA | CHN |
100003 | USA | |
的假设是,各个emplid
会有多达4个国籍。
我开始用下面的代码,但对于emplid
小号谁只是有1 citizenship
,正在重演在citizenship_2
,citizenship_3
价值,这应该只是空白:
select *
, substring_index(Citizenship_multiple, ',', 1) as Citizenship_1
, substring_index(substring_index(Citizenship_multiple,',',-1),',',1) as Citizenship_2
, substring_index(substring_index(Citizenship_multiple,',',-2),',',1) as Citizenship_3
, substring_index(substring_index(Citizenship_multiple,',',-3),',',1) as Citizenship_4
from
(select *
, group_concat(distinct Citizenship) as Citizenship_multiple
from `citizenship_csv_meta`
group by emplid) a
感谢,但我给的数据只是一个小样本,真正的数据集将有超过170个国家,所以我不认为硬编码国家是有效的:( – PMa 2014-11-04 23:16:45