笔试 -- SQL语句之横竖表转换

最近笔试中有 【将竖表转换为横表】的题 ,记录一下横竖表转换的SQL语句~

一、表结构

竖表结构

create table Table_A
(
    姓名 varchar(20),
    课程 varchar(20),
    成绩 int
)
insert into Table_A(姓名,课程,成绩) values('张三','语文',60)
insert into Table_A(姓名,课程,成绩) values('张三','数学',70)
insert into Table_A(姓名,课程,成绩) values('张三','英语',80)
insert into Table_A(姓名,课程,成绩) values('李四','语文',90)
insert into Table_A(姓名,课程,成绩) values('李四','数学',100)

竖表
横表结构

create table Table_B
(
    姓名 varchar(20),
    语文 int,
    数学 int,
    英语 int
)
insert into Table_B(姓名,语文,数学,英语) values('张三',60,70,80)
insert into Table_B(姓名,语文,数学,英语) values('李四',90,100,0)

横表

二、竖表转横表

Table_A --> Table_B

1-1 case when then

select
[姓名],
sum(case [课程] when '语文' then [成绩]  end) as [语文],
sum(case [课程] when '数学' then [成绩]  end) as [数学],
sum(case [课程] when '英语' then [成绩]  end) as [英语]
from [Table_A]
group by [姓名]

1-2 pivot

select * from [Table_A]
pivot(
	max([成绩])for [课程]in ([语文],[数学],[英语])
) as 临时表

执行结果
竖表转横表

三、横表转竖表

Table_B --> Table_A

1-1 UNION ALL

select [姓名],'语文'as 课程,语文 as [成绩] from [Table_B] union all
select [姓名],'数学'as 课程,数学 as [成绩] from [Table_B] union all
select [姓名],'英语'as 课程,英语 as [成绩] from [Table_B]
order by [姓名],[课程]

1-2 unpivot

select [姓名],[课程],[成绩] from [Table_B]
unpivot
(
	[成绩] for [课程] in([语文],[数学],[英语])
) as 临时表
order by [姓名],[课程]

执行结果:
横表转竖表

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值