/*
标题:普通行列转换(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
- 浏览: 954962 次
- 性别:
- 来自: 北京
最新评论
-
changelo:
缺少了秦皇岛市
中国省,市,区 json数据 -
yurui829:
解析配置行那等号前后有可能有空格,改为如下比较好:String ...
java 读取.ini配置文件工具类 -
贝塔ZQ:
poi生成excel文档,感觉蛮复杂的,可以试试用pageof ...
POI生成excel带下拉 -
langke93:
我发现greenplum 通过jdbc insert性能很差, ...
jdbc 配置连接greeplum数据,spring配置连接greeplum数据(简单配置学习) -
zhutulang:
哪有收邮件???
Spring 邮件接收发送实例
相关推荐
SQL查询结果拼接
在“横向显示列的数据”这个场景中,我们可以考虑使用动态SQL(Dynamic SQL)来构建我们的存储过程。动态SQL允许我们在运行时构建和执行SQL语句,这在处理不确定数量或未知列名的情况下特别有用。例如,如果我们有一...
在SQL Server 2005中,处理数据时有时会遇到需要将纵向排列的数据转换为横向展示的情况,这种操作被称为“行列转换”。标题中的“sql 2005 纵向表横向输出存储过程”指的就是利用T-SQL语言编写的一个存储过程,用于...
本文通过两个实例详细解析了SQL查询语句如何实现行转列横向显示。 **示例1**: 在SQL中,行转列通常通过聚合函数如`SUM`配合`CASE`或`IIF`表达式来实现。在Access这种不支持`CASE`语句的数据库系统中,可以使用`IIF...
### SQL实现两张无关联表的数据列合并在一张结果集中 #### 实现思路及技术要点解析 在实际工作中,我们经常会遇到需要将两张无关联表的数据列合并到一个结果集中的需求。这种操作可以帮助我们更好地组织数据,使得...
本示例“导航菜单鼠标放上去横向显示子菜单”聚焦于一个常见的交互设计模式,即通过悬停鼠标来展开横向子菜单,提高用户体验。这种设计方式常见于ASP.NET等Web应用程序中。 首先,我们要理解ASP.NET是什么。ASP.NET...
Sql在查询操作时,根据年、月等条件查询出的某一物品的销售量数据时,数据显示为树形,在使用sql后,将树形的数据,转化为横向展示,即年、月作为列显示
SQL sever一份表单数据纵向,转换横向显示成报表
内容概要:本文档详细介绍了多种高级 SQL 查询技术的应用实例,涵盖了单个查询的进阶...针对某些问题还有关于结果展示细节的要求(如中文属性列名显示)。这为读者不仅提供了解决思路,还提供了执行方法的具体示范。
根据提供的信息,我们可以了解到这里涉及的是通过SQL查询来统计仓库中的库存情况,即根据入库单和出库单来计算每种商品当前的库存数量。为了更好地理解和实现这一目标,我们将从以下几个方面进行深入探讨: ### ...
在SQL查询语言中,将指定的列作为标题列是一种数据透视技术的应用,这种技术主要用于将行数据转换为列数据,从而实现数据结构的重塑,便于数据分析和报告制作。这一过程通常被称为“列转行”或“透视”,在SQL中可以...
以上四种方法都能实现将学生成绩表的横向记录转换为纵向显示,但适用场景不同。静态SQL适用于课程列名固定的情况,而动态SQL则适用于课程列名不确定,可能随时间变化的情况。在实际应用中,需要根据具体需求选择合适...
例如,他们可以使用`SELECT @@version`来确定数据库服务器的版本,结果显示服务器已安装了SQL Server 2000 SP4补丁。此外,他们还通过`SELECT user_name()`获取了当前数据库连接的用户名(这里是'webuser'),以及...
版本更新: 1, 增加"异步模式", 效率做了比较大的优化. 2, 界面工具栏改为横向显示, 比较美观 3, 增加执行"中断"功能, 使用超过上百万笔数据记录进行测试, 可正常运作 4, 增加"快速"模式. (该模式下...
在最终的查询结果中,我们将看到每个班级的每个学生的语文、数学、英语的平均分,以及所有学生的总分的平均值。此外,也会有每个课程的总体平均分和所有课程的总平均分。 这个示例展示了SQL的强大之处,它可以处理...
通常,我们会遍历数据库查询结果,每条数据对应表格的一行,然后将这些行并排展示。"区域横向重复"就是这个过程的一种优化,它允许我们在一行内展示多条数据,而不是每条数据单独一行,这样可以更有效地利用页面空间...
至于SQL和DBA方面,虽然它们不直接涉及单元格的合并,但数据库设计和查询结果的组织方式会直接影响到前端显示。比如,通过SQL的GROUP BY语句可以将相同数据聚合,从而减少在前端进行合并的需要。 最后,关于源码,...
- 以指定的次序返回查询结果:使用ORDER BY子句。 - 按多个字段排序:在ORDER BY中指定多个字段。 - 按子串排序:基于子串位置进行排序。 - 按数字字母混合字符串中的字母排序:在ORDER BY中使用函数处理混合...
而目标是要将这些数据转化为横向排列的形式,即每一行显示一个学生的所有科目成绩。 #### 解决方案 ##### 1. SQL Server 2000 在SQL Server 2000中,我们可以使用`CASE`语句结合`MAX`函数和`GROUP BY`来实现这一...