sqlserver下将数据库记录的列记录转换成行记录的方法

假设有张学生成绩表(tb)如下:

Name Subject Result

张三 语文  74

张三 数学  83

张三 物理  93

李四 语文  74

李四 数学  84

李四 物理  94

想变成

姓名 语文 数学 物理

---------- ----------- ----------- -----------

李四 74 84 94

张三 74 83 93

SQL 语句如下:

复制代码 代码如下:

create table tb

(

Name varchar(10) ,

Subject varchar(10) ,

Result int

)

insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)

insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)

insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)

insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)

insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)

insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)

go

--静态SQL,指subject只有语文、数学、物理这三门课程。

select name 姓名,

max(case Subject when '语文' then result else 0 end) 语文,

max(case Subject when '数学' then result else 0 end) 数学,

max(case Subject when '物理' then result else 0 end) 物理

from tb

group by name

--动态SQL,指subject不止语文、数学、物理这三门课程。

declare @sql varchar(8000)

set @sql = 'select Name as ' + '姓名'

select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'

from (select distinct Subject from tb) as a

set @sql = @sql + ' from tb group by name'

exec(@sql)

时间: 2024-10-10 22:30:33

sqlserver下将数据库记录的列记录转换成行记录的方法的相关文章

三种列区域转换成行区域的方法图解

  方法一: 1.选中A4:A8,右键-复制 2.选中C6,右键-选择性粘贴-勾选转置即可 方法二: 1.选中C6:G6,在编辑栏输入=TRANSPOSE(A4:A8) 2.按ctrl+shift+enter即可 方法三: 1.在C6:G6单元格里分别输入A4-A8 2.选中C6:G6单元格,开始选项卡-编辑-查找和选择下拉选择替换(ctrl+h) 3.查找内容输入A,替换为输入=A,最后按全部替换即可

sqlserver下将数据库记录的列记录转换成行记录的方法_MsSql

假设有张学生成绩表(tb)如下: Name Subject Result 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 想变成 姓名 语文 数学 物理 ---------- ----------- ----------- ----------- 李四 74 84 94 张三 74 83 93 SQL 语句如下: 复制代码 代码如下: create table tb ( Name varchar(10) , Subject varcha

用SQLServer实现数据表中,将任意一条记录信息移动到该表中的任意位置

server|sqlserver|数据 -- 定位数据-- 设计思路:--   保存要被移动记录的原主键值和新主键值(如果有主键的话),然后比较两个主键值的大小(记录信息按升序排列),--   如果原主键值大,表明该记录被移动到前面的新位置,可将原位置的记录信息保存下来,并将从新位置的记录信息到--   原记录的前一条记录的信息顺次往下移动,把保存的原记录移动到新位置即可.--   如果原主键值小,表明该记录被移动到后面的新位置,可将原位置的记录信息保存下来,并将从新位置的记录信息到--   原

python使用xlrd实现检索excel中某列含有指定字符串记录的方法

  这篇文章主要介绍了python使用xlrd实现检索excel中某列含有指定字符串记录的方法,涉及Python使用xlrd模块检索Excel的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python使用xlrd实现检索excel中某列含有指定字符串记录的方法.分享给大家供大家参考.具体分析如下: 这里利用xlrd,将excel中某列数据中,含有指定字符串的记录取出,并生成用这个字符串命名的txt文件 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1

数据库配置问题导致近两亿选举投票记录泄露

本文讲的是数据库配置问题导致近两亿选举投票记录泄露,海量数据泄露,数据库所有权无人认领. 研究人员克里斯·维克里(Chris Vickery)发现,某配置错误的数据库导致1.91亿条投票记录被泄露.然而,该数据库似乎不存在所有者,它本来就是公开的,任何发现它的人都能得到这些数据. 数据库里有什么? 维克里在 Databreaches.net 上分享了他的发现.双方试图通过数据库的位置和细节找到其所有者,但并没有效果,所以他们找到了 <CSO> 杂志专栏作家.自由程序员史蒂夫·拉根(Steve

SqlServer下数据库链接的使用方法

有时候我们希望在一个sqlserver下访问另一个sqlserver数据库上的数据,或者访问其他oracle数据库上的数据,要想完成这些操作,我们首要的是创建数据库链接. 数据库链接能够让本地的一个sqlserver登录用户映射到远程的一个数据库服务器上,并且像操作本地数据库一样.那么怎么创建数据库链接呢?我现在有两种方法可以实现. 第一种:在 sqlserver 企业管理器中,建立,这个比较简单的,首先在 "服务器对象"节点下的"数据库链接"节点 上点右键 ,在出

当我在JSP页面上动态的往数据库里插入数据时,在页面上显示新插入的记录的时候,该条记录总是显示在最后一条,怎么做才能让刚刚新插入的记录显示在最前面?

问题描述 在数据库中往外读取数据时,在页面上用表格显示是按照数据表里的ID号依次往下排的,当我在JSP页面上动态的往数据库里插入数据时,在页面上显示新插入的记录的时候,该条记录总是显示在最后一条,怎么做才可以让刚刚新插入的记录显示在JSP页面最前面,也就是显示在第一条的位置上?(用的是表格显示数据) 解决方案 解决方案二:你查询的时候按ID降序获得结果集这样不就可以了解决方案三:引用1楼zn85600301的回复: 你查询的时候按ID降序获得结果集这样不就可以了 只有引用的内容不允许回复!解决方

SQLServer · 最佳实践 · 数据库实现大容量插入的几种方式

背景 很多用户在使用阿里云云数据库SQL Server时,为了加快插入速度,都尝试使用大容量插入的方式,大家都知道,对于完整恢复模式下的数据库,大容量导入执行的所有行插入操作都会完整地记录在事务日志中.如果使用完整恢复模式,大型数据导入会导致填充事务日志的速度很快.相反,对于简单恢复模式或大容量日志恢复模式,大容量导入操作的按最小方式记录日志减少了大容量导入操作填满日志空间的可能性.另外,按最小方式记录日志的效率也比按完整方式记录日志高 . 但实际上,当大容量导入与数据库镜像共存时,会出现镜像

大数据量下的数据库查询与插入如何优化? (整理)

数据库经常要做一些查询与插入,但是如果查询和插入的数据量过大的时候就会引发数据库性能问题,降低数据库工作效率.因此性能调优是大家在工作中都能够预见的问题,大到世界五百强的核心系统,小到超市的库存系统,几乎都会有要调优的时候.面对形形色色的系统,林林总总的需求,调优的手段也是丰富多彩. 1.尽量使语句符合查询优化器的规则避免全表扫描而使用索引查询 2.避免频繁创建和删除临时表,以减少系统表资源的消耗. 3.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理. 4.建立高效的索引