最近工作需要一个行转列的需求,在网上找了一下有很多,问同事后自己也总结了一下写了个小例子。
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)
动手写写就会了,呵呵。
分享到:
相关推荐
sqlserver 实现 行转列 split 分割的函数,具体使用方法写有在文件里。
Sql Server里面的行转列,列转行
sqlserver 动态行专列 避免了数据列过多的时候大量的使用case when then...... 原数据 : UserName Subject Score Nick 语文 80 Nick 数学 90 Nick 英语 70 Nick 生物 85 Kent 语文 80 Kent 数学 90 Kent ...
SqlServer如何进行行转列和列转行方法
行转列sql实例行转列sql实例行转列sql实例行转列sql实例行转列sql实例
列转行行转列
SQL行转列参考代码(sqlserver)
SQL 行转列+动态获取列名 通用的动态获取列名
向大家介绍 SQL Server 中行转列问题的终极解决方案,主要应用case语句来解决行转列的问题
sqlserver 行转成列 sqlserver 把行转成列 sqlserver 把行转成列
sql行变列说明
sqlserver 行数据转成列数据,#temp1为数据表,#temp2为辅助表,具体场景可微调替换。
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...
sql行转列_列转行问题.
SQL之行转列 SQL之行转列 SQL之行转列
本文主要介绍了SQL Server行转列的方法解析。具有很好的参考价值。下面跟着小编一起来看下吧
sqlserver使用UNPIVOT函数列转行
sql列转行以及行转列的通用存储过程!mssqlserver版本!
SQL Server 列转行代码,供大伙参考