版权声明:本文为博主原创文章,请随意转载。 https://blog.csdn.net/a_hui_tai_lang/article/details/81436424
-- 建表
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 列转行
-- 建表
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;
有啥私活项目,可以邮箱联系
我的邮箱:[email protected]
我新建了一个大数据的学习交流群
QQ:2541692705
Q群:882855741