当前位置:首页 > My SQL > 正文内容

MYSQL横表变竖表

Z先生5年前 (2020-06-11)My SQL746

原始数据

1095882-20170713111234462-561827214.png

目标数据

1095882-20170713111329072-838085850.png


方法一:SQL语句:

select name as '姓名', 
  max(case subject when '语文' then result else 0 end) '语文',
  max(case subject when '数学' then result else 0 end) '数学',
  max(case subject when '英语' then result else 0 end) '英语'
from student group by name;

如果是汇总,语句中max换sum

精华解析:

max(case subject when '语文' then result else 0 end)

如果subject字段='语文',那么读取 result字段,否则就是0,然后再MAX一下,就取到有成绩的值了。可以用汇总统计


方法二(笨方法,硬拼):SQL语句:

select s.name as '姓名',
    s1.result as '语文',
    s2.result as '数学',
    s3.result as '英语'
from student s 
    left join student s1 on s1.name=s.name and subject='语文'
    left join student s2 on s2.name=s.name and subject='数学'
    left join student s3 on s3.name=s.name and subject='英语' ;


分享给朋友:

相关文章

Mysql 批量设置未设置默认值字段的默认值。

DROP PROCEDURE IF EXISTS `sp_setdefaultvalue`; CREATE PROCEDURE `sp_set...

Mysql 复合更新代码片段(mysql update join)

直接上代码UPDATE  xcwl_biz a INNER JOIN ( SELECT bizid, count(orderid)&nbs...

Mysql 时间戳相关函数

时间戳转字符串:select from_unixtime(time),time单位是秒。或者select from_unixtime(time,format),time单位是秒。select ...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。