SQL Server行转列使用

最近工作需要一个行转列的需求,在网上找了一下有很多,问同事后自己也总结了一下写了个小例子。

create table score
(
	s_id int primary key identity(101,1),
	p_id varchar(20),
	s_subject varchar(20),
	s_score float,
	s_date datetime
)
insert into score(p_id,s_subject,s_score,s_date) values('xiaobo','语文',68,'2010-01-01');
insert into score(p_id,s_subject,s_score,s_date) values('xiaobo','数学',78,'2010-01-01');
insert into score(p_id,s_subject,s_score,s_date) values('xiaobo','英文',88,'2010-01-01');

insert into score(p_id,s_subject,s_score,s_date) values('xiaobo','语文',78,'2010-02-01');
insert into score(p_id,s_subject,s_score,s_date) values('xiaobo','数学',77,'2010-02-01');
insert into score(p_id,s_subject,s_score,s_date) values('xiaobo','英文',80,'2010-02-01');

insert into score(p_id,s_subject,s_score,s_date) values('xiaobo','数学',100,'2010-03-01');

insert into score(p_id,s_subject,s_score,s_date) values('mengya','语文',98,'2010-01-01');
insert into score(p_id,s_subject,s_score,s_date) values('mengya','数学',89,'2010-01-01');
insert into score(p_id,s_subject,s_score,s_date) values('mengya','英文',78,'2010-01-01');

select * from score

 

--合并统计
select p_id as 学生,
	sum(case s_subject when '数学' then s_score else 0 end) as 数学,
	sum(case s_subject when '语文' then s_score else 0 end) as 语文,
	sum(case s_subject when '英文' then s_score else 0 end) as 英语,
	sum(case s_subject when 'JAVA' then s_score else 0 end) as JAVA 
from score group by p_id

 

--列表统计
select s_id as 主键,p_id as 学生,
	sum(case s_subject when '数学' then s_score else 0 end) as 数学,
	sum(case s_subject when '语文' then s_score else 0 end) as 语文,
	sum(case s_subject when '英文' then s_score else 0 end) as 英语,
	sum(case s_subject when 'JAVA' then s_score else 0 end) as JAVA,
	s_date as 日期
from score group by s_id,p_id,s_date order by month(s_date)

 

--条件列表统计
select s_id as 主键,p_id as 学生,
	sum(case s_subject when '数学' then s_score else 0 end) as 数学,
	sum(case s_subject when '语文' then s_score else 0 end) as 语文,
	sum(case s_subject when '英文' then s_score else 0 end) as 英语,
	sum(case s_subject when 'JAVA' then s_score else 0 end) as JAVA,
	s_date as 日期
from score where p_id='xiaobo'  group by s_id,p_id,s_date order by month(s_date)

 

动手写写就会了,呵呵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值