sql行转列、列转行

-- 建表
CREATE  TABLE StudentScores
(
   UserName         NVARCHAR(20),        -- 学生姓名
   Subject          NVARCHAR(30),        -- 科目
   Score            FLOAT               -- 成绩
)

-- 添加数据
INSERT INTO StudentScores SELECT '张三', '语文', 80 ;
INSERT INTO StudentScores SELECT '张三', '数学', 90 ;
INSERT INTO StudentScores SELECT '张三', '英语', 70 ;
INSERT INTO StudentScores SELECT '张三', '生物', 85 ;
INSERT INTO StudentScores SELECT '李四', '语文', 80 ;
INSERT INTO StudentScores SELECT '李四', '数学', 92 ;
INSERT INTO StudentScores SELECT '李四', '英语', 76 ;
INSERT INTO StudentScores SELECT '李四', '生物', 88 ;
INSERT INTO StudentScores SELECT '码农', '语文', 60 ;
INSERT INTO StudentScores SELECT '码农', '数学', 82 ;
INSERT INTO StudentScores SELECT '码农', '英语', 96 ;
INSERT INTO StudentScores SELECT '码农', '生物', 78 ;

使用case when行转列

--  使用case when行转列
select UserName,
       max(case when subject='语文' then score else 0 end) 语文,
       max(case when subject='数学' then score else 0 end) 数学,
	   max(case when subject='英语' then score else 0 end) 英语,
	   max(case when subject='生物' then score else 0 end) 生物
from StudentScores
group by UserName

##使用union all 列转行git

-- 建表
drop table if exists StudentScores2;
CREATE  TABLE StudentScores2
(
   UserName         NVARCHAR(20),        -- 学生姓名
   语文             FLOAT,        -- 科目
   数学             FLOAT,        -- 科目
   英语             FLOAT,        -- 科目
   生物             FLOAT        -- 科目
);

-- 添加数据
insert into StudentScores2
 select UserName,
       max(case when subject='语文' then score else 0 end) 语文,
       max(case when subject='数学' then score else 0 end) 数学,
	   max(case when subject='英语' then score else 0 end) 英语,
	   max(case when subject='生物' then score else 0 end) 生物
from StudentScores
group by UserName;

-- 使用union all 列转行

select UserName,'语文' subject,语文 score
from StudentScores2
union all
select UserName,'数学' subject,数学 score
from StudentScores2
union all
select UserName,'英语' subject,英语 score
from StudentScores2
union all
select UserName,'生物' subject,生物 score
from StudentScores2;

个人GitHub
QQ:2541692705
邮箱:loyalwilliams@163.com
微信扫一扫关注我,没事能够玩玩小游戏



我想去流浪,我想去读书,如有机会,江湖再见
扫一扫,领取红包,就当奖励你我付出的努力
github