/*
标题:普通行列转换(version 2.0)
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-03-09
地点:广东深圳
说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法。
问题:假设有张学生成绩表(tb)如下:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
-------------------
*/
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go
--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名
--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)
--SQL SERVER 2005 静态SQL。
select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b
--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
set @sql = '[' + @sql + ']'
exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
---------------------------------
/*
问题:在上述结果的基础上加平均分,总分,得到如下结果:
姓名 语文 数学 物理 平均分 总分
---- ---- ---- ---- ------ ----
李四 74 84 94 84.00 252
张三 74 83 93 83.33 250
- 浏览: 934878 次
- 性别:
- 来自: 北京
最新评论
-
changelo:
缺少了秦皇岛市
中国省,市,区 json数据 -
yurui829:
解析配置行那等号前后有可能有空格,改为如下比较好:String ...
java 读取.ini配置文件工具类 -
贝塔ZQ:
poi生成excel文档,感觉蛮复杂的,可以试试用pageof ...
POI生成excel带下拉 -
langke93:
我发现greenplum 通过jdbc insert性能很差, ...
jdbc 配置连接greeplum数据,spring配置连接greeplum数据(简单配置学习) -
zhutulang:
哪有收邮件???
Spring 邮件接收发送实例
相关推荐
SQL查询结果拼接
主要为大家详细介绍了两个关于SQL查询语句行转列横向显示的实例解析,感兴趣的小伙伴们可以参考一下
SQL创建存储过程[横向显示列的数据] 在动态显示不确定列数量的数据时,有点作用
SQL实现两张无关联表的数据列合并在一张结果集中实现思路。
Sql在查询操作时,根据年、月等条件查询出的某一物品的销售量数据时,数据显示为树形,在使用sql后,将树形的数据,转化为横向展示,即年、月作为列显示
SQL sever一份表单数据纵向,转换横向显示成报表
通过T-Sql语句横向显示数据库表中的列数据,非常实用,欢迎下载交流。
版本更新: 1, 增加"异步模式", 效率做了比较大的优化. 2, 界面工具栏改为横向显示, 比较美观 3, 增加执行"中断"功能, 使用超过上百万笔数据记录进行测试, 可正常运作 4, 增加"快速"模式. (该模式下...
包含日常特殊处理SQL语句,如:删重,横向显示、两表条件更新、远程导入、批量导入、转换符、日期转换等
实例6:sql中的横向间隔显示字段值、排序 (二楼) 实例7:将没有打开的文件汇总到当前表中 (三楼)(2006年4月10日新增) 实例7:改进版:将查询结果保存在临时对象中,而不再使用工作表单元格作为临时区域 (第3...
这是一个TCP/IP的程序,通过ONRECEIVE接收客户端连接,接收数据进行显示,并且能够显示到界面上,把符合条件的数据保存到SQLSERVER数据库中。其中,还有LISTBOX的横向滚动条的显示的内容,每次接收的内容滚动到控件...
--新增导出查询结果集到Excel文档的功能。 V3.3.4 --修改了窗体内部控件自动放缩的控制算法; --修改数据显示窗口支持滚轮鼠标的上下左右翻滚操作。 V3.3.0 --修改了连接ORACLE的连接字符串,要求客户端安装...
--测试数据 create table tb_kq( banzu varchar(20), chuqinqk varchar(20), name varchar(20), primary key(banzu,chuqinqk,name) ); insert into tb_kq(banzu,chuqinqk,name) select '班组1','出勤','张1' ...
实例304 将DataGrid表格中的查询结果输出到Excel中 实例305 利用Word打印 实例306 利用Excel打印 10.10 控制打印 实例307 打印超长字符串自动换行 实例308 批量打印文档 实例309 实现横向打印 实例310 设置...
实例304 将DataGrid表格中的查询结果输出到Excel中 实例305 利用Word打印 实例306 利用Excel打印 10.10 控制打印 实例307 打印超长字符串自动换行 实例308 批量打印文档 实例309 实现横向打印 实例310 设置...