SQL列转行、行转列

2017-04-28  本文已影响2946人  _子墨

笔者前不久终于发布了自己的APP《小印记》,希望读者能前往App Store下载《小印记》支持一下笔者,谢谢!🙂

《小印记》iOS源码分享--极光推送实践篇
《小印记》iOS源码分享--自定义弹框篇
《小印记》源码分享--极光推送服务器篇
《小印记》iOS源码分享--网络层封装篇


列传行

444.png
-- 列传行
drop table studentA;
create table studentA (name varchar(10) ,subject varchar(10) ,score int) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into studentA values ('张三','语文',75),('张三','数学',83),('张三','物理',96);
insert into studentA values ('李四','语文',74),('李四','数学',84),('李四','物理',95);

select name 姓名,
    max(case subject when '语文' then score end) 语文,
    max(case subject when '数学' then score end) 数学,
    max(case subject when '物理' then score end) 物理
from studentA
group by name

行转列

5555.png
-- 行转列
drop table studentB;
create table studentB (姓名 varchar(10) ,语文 varchar(10) ,数学 varchar(10) ,物理 varchar(10)); -- 不要加引号''

insert into studentB values ('张三',75,83,96),('李四',74,84,95);

select * from (
    select 姓名, '语文' as 科目, 语文 as 分数 from studentB 
    union all
    select 姓名, '数学' as 科目, 数学 as 分数 from studentB
    union all
    select 姓名, '物理' as 科目, 物理 as 分数 from studentB
    ) a

(遇插入数据失败问题,请修改字符集为UTF8)

WechatIMG138.png
上一篇下一篇

猜你喜欢

热点阅读