SQL 列转行的实现


-- =============================================
-- Author: 特工绍特 
-- Create date: 9月19日
-- Description: SQL列转行的实现,列外扩展了一下求和
-- QQ:707891607 欢迎大家来一起交流
-- =============================================

create table #test
(
  id int primary key identity(1,1),
  name varchar(20),
  subject varchar(20),
  source int
)

insert into #test
select '张三','数学','85' union all
select '张三','语文','45' union all
select '张三','英语','80' union all
select '李四','语文','55' union all
select '李四','数学','60' union all
select '王五','数学','65' union all
select '王五','英语','70'

select * from #test
--结果
--id          name                 subject              source
------------- -------------------- -------------------- -----------
--1           张三                   数学                   85
--2           张三                   语文                   45
--3           张三                   英语                   80
--4           李四                   语文                   55
--5           李四                   数学                   60
--6           王五                   数学                   65
--7           王五                   英语                   70

 

select name
,sum(case subject when '数学' then source else 0 end)as '数学'
,sum(case subject when '语文' then source else 0 end)as '语文'
,sum(case subject when '英语' then source else 0 end)as '英语'
,sum(source)as '总分'
from #test group by name
union all
select null
,sum(case subject when '数学' then source else 0 end)as '数学'
,sum(case subject when '语文' then source else 0 end)as '语文'
,sum(case subject when '英语' then source else 0 end)as '英语'
,sum(source)
from #test
--结果
--name                 数学          语文          英语      总分
---------------------- ----------- ----------- ----------- ----------
--李四                   60          55          0           115
--王五                   65          0           70          135
--张三                   85          45          80          210
--NULL                   210         100         150         460

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值