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 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-09-14 14:31:09

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

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

  方法一: 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下将数据库记录的列记录转换成行记录的方法

假设有张学生成绩表(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数据库高版本备份还原为低版本的方法_MsSql

问题描述:高版本sql备份在低版本sql还原问题(出现媒体簇的结构不正确) 分析原因:sql版本兼容问题,sql server兼容级别是用作向下兼容用,高版本的sql备份在低版本中不兼容 解决方法 :1.通过管理器的脚本生成向导,把其他数据库 ,表,存储过程等对象的脚本生成,然后在低版本的sql server下执行建立这些对象.. 2.通过dts/ssis,将表中的数据导过去.   此处我们把第1种开发方法 做下详细介绍(以sql2008的其他数据库 还原到sql2005为例). 1.首先我们在

sql server 还原数据库时提示数据库正在使用,无法进行操作的解决方法_MsSql

这个问题的原因在于有用户连接了当前要做还原的数据库,这里的用户甚至包括当前要做还原的用户.解决办法就是关闭与要还原数据库的所有连接. 小编推荐的一个方法:到服务里面重启下sqlserver服务即可. 问题一描述:SQL Server数据库备份还原后,在数据库名称后会出现"受限制访问"字样 问题二描述:在对SQL Server数据库进行还原时,提示:System.Data.SqlClient.SqlError:因为数据库正在使用,所以无法获得对数据库的独占访问权.(Microsoft.S

将一个表中个某一列修改为自动增长的方法_MsSql

昨天有位学生问我"一个表已经建好了,能不能将里面的一个字段改为自动增长?","能,但没有必要去修改它,应该在建表的时候就设计好" 我说. 这时候他和另一位学生 讨论起来.他觉得可以,另一位试过说不行.因为他们不是我带班级的学生,他们也咨询了自己的老师,所以我没有再发表意见. 需求: 如何将一张表中个某一列修改为自动增长的. 解答: 1) 情景一:表中没有数据, 可以使用 drop column然后再add column alter table 表名 drop col

SQLserver中用convert函数转换日期格式的方法_MsSql

SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm 例如: select getdate() 整理了一下SQL Server里面可能经常会用到的日期格式转换方法: 举例如下: select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-','

用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