在处理数据的时候,因为数据源在Excel文件中,本人Excel文件的处理方法不是太会,加上朋友说在Excel中处理这样的数据很麻烦,我就想着干脆导入到数据库中通过代码解决这个问题,感兴趣的可以找我拿数据源自己试试。自己也是为了避免忘记操作,所以记录下来。

    数据格式大致如下(数据量有70w)标题是我自己加上去的。

   

mysql列转行 逗号 mysql列转行sql_Excel数据源导入数据库

    首先在数据库中新建一张名为diseny的表,表的字段需要和Excel文件中的字段数相同,然后选中该表,鼠标右键出现弹框,选择导入向导,如下图:

 

mysql列转行 逗号 mysql列转行sql_Excel数据源导入数据库_02

   

    一次完成对应步骤即可,下图为其中一个关键步骤(意为数据库表字段和Excel文件数量相对应):

mysql列转行 逗号 mysql列转行sql_数据格式_03

    完成上述步骤,就会得到这张表:

mysql列转行 逗号 mysql列转行sql_MySQL列转行_04

    因为这样的表是无法满足我要做的数据分析,所以需要做简单处理,按时间分组,address列转行做表字段,表内容为costtime(等待时间),贴上对应的SQL语句:

DROP TABLE IF EXISTS diseny_new;
     CREATE TABLE diseny_new
     SELECT time ,
     max(case WHEN address='古迹探索营' THEN costtime END) as 探索,
     max(case WHEN address='七个小矮人矿山车' THEN costtime END) as 矮人,
     max(case WHEN address='古迹探索营的绳索挑战道' THEN costtime END) as 挑战道,
     max(case WHEN address='与星球大战里的机器人朋友见面' THEN costtime END) as 机器朋友,
     max(case WHEN address='创极速光轮-雪佛兰呈献' THEN costtime END) as 雪佛兰,
     max(case WHEN address='创界:雪佛兰数字挑战' THEN costtime END) as 数字挑战,
     max(case WHEN address='加勒比海盗——沉落宝藏之战' THEN costtime END) as 沉落宝藏,
     max(case WHEN address='千年隼号' THEN costtime END) as 千年隼号,
     max(case WHEN address='变身钢铁侠' THEN costtime END) as 钢铁侠,
     max(case WHEN address='古迹探索营的探索步行道' THEN costtime END) as 步行道,
     max(case WHEN address='喷气背包飞行器' THEN costtime END) as 飞行器,
     max(case WHEN address='太空幸会史迪奇' THEN costtime END) as 史迪奇,
     max(case WHEN address='奇幻童话城堡里的迪士尼公主们' THEN costtime END) as 公主,
     max(case WHEN address='奇想花园的米奇俱乐部' THEN costtime END) as 米奇,
     max(case WHEN address='小熊维尼历险记' THEN costtime END) as 小熊,
     max(case WHEN address='小飞侠天空奇遇' THEN costtime END) as 飞侠,
     max(case WHEN address='小飞象' THEN costtime END) as 飞象,
     max(case WHEN address='巴斯光年星际营救' THEN costtime END) as 巴斯,
     max(case WHEN address='幻想曲旋转木马' THEN costtime END) as 木马,
     max(case WHEN address='探秘海妖复仇号' THEN costtime END) as 海妖,
     max(case WHEN address='探险家独木舟' THEN costtime END) as 独木舟,
     max(case WHEN address='旋转疯蜜罐' THEN costtime END) as 蜜罐,
     max(case WHEN address='星球大战远征基地' THEN costtime END) as 基地,
     max(case WHEN address='星球大战远征基地的凯洛?伦' THEN costtime END) as 凯洛伦,
     max(case WHEN address='星球大战远征基地的达斯?维达' THEN costtime END) as 达斯维达,
     max(case WHEN address='晶彩奇航' THEN costtime END) as 晶彩奇航,
     max(case WHEN address='欢笑聚友会的丛林迪士尼朋友们' THEN costtime END) as 朋友,
     max(case WHEN address='漫威英雄总部' THEN costtime END) as 漫总,
     max(case WHEN address='漫威英雄总部的美国队长' THEN costtime END) as 美国队长,
     max(case WHEN address='漫威英雄总部的蜘蛛侠' THEN costtime END) as 蜘蛛侠,
     max(case WHEN address='漫游童话时光' THEN costtime END) as 童话,
     max(case WHEN address='爱丽丝梦游仙境迷宫' THEN costtime END) as 迷宫,
     max(case WHEN address='电影放映室' THEN costtime END) as 电影 ,
     max(case WHEN address='翱翔?飞越地平线' THEN costtime END) as 地平线,
     max(case WHEN address='船奇戏水滩' THEN costtime END) as 戏水滩,    max(case WHEN address='雷鸣山漂流' THEN costtime END) as 雷鸣山
    FROM diseny GROUP BY time

    因为偷懒的原因表字段就用了中文名称

    下图为列转行之后的数据格式(截图并不完整):

mysql列转行 逗号 mysql列转行sql_mysql列转行 逗号_05

PS : 好记性,不如烂笔头,记下自己不会的,慢慢的就会了。