MySQL多种行转列方法

痛定思痛。 2022-02-20 15:23 358阅读 0赞

方法1.case … when … then … ELSE ‘’ END

参考文章:https://blog.csdn.net/ml1990s/article/details/16953999

20190414100231673.png

SQL语句

  1. SELECT brand_name,
  2. MAX(case level_code when 'LV1' then task_limit ELSE '' END) AS 'LV1',
  3. MAX(case level_code when 'LV2' then task_limit ELSE '' END) AS 'LV2',
  4. MAX(case level_code when 'LV3' then task_limit ELSE '' END) AS 'LV3'
  5. FROM t_wd_task_limi GROUP BY brand_id

查询结果

20190414100309772.png

方法2.存储过程:行转列

表:

20190414100231673.png

存储过程代码:

  1. SET @sql = NULL;
  2. SELECT
  3. GROUP_CONCAT(DISTINCT
  4. CONCAT(
  5. 'MAX(IF(c.level_code = ''',
  6. c.level_code,
  7. ''', s.task_limit, '''')) AS ''',
  8. c.level_code, ''''
  9. )
  10. ) INTO @sql
  11. FROM t_wd_proxy_leve c WHERE c.delete_flag='1' ORDER BY c.sort_no;
  12. SET @sql = CONCAT('Select s.brand_id AS id, s.brand_name, ', @sql,
  13. ' From t_wd_task_limi s
  14. Left Join t_wd_proxy_leve c On c.level_code = s.level_code');
  15. SET @sql = CONCAT(@sql, ' Group by s.brand_id');
  16. PREPARE stmt FROM @sql;
  17. EXECUTE stmt;
  18. DEALLOCATE PREPARE stmt;

查询结果:

20190414100510687.png

发表评论

表情:
评论列表 (有 0 条评论,358人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL

    离恨恰如春草,更行更远还生 先看结果: ![这里写图片描述][70] 把上面一个字段,里面的每个数据都是用逗号分隔的,把它变成下面这样: ![这里写图片描述][