sqlserver行列转换
- sqlserver行转列
--创建行转列表及插入数据
create table tb_RowConvertToColumn
(
username nvarchar(100) null,
course nvarchar(100) null,
score numeric(10,2) null
)
insert into tb_RowConvertToColumn(username,course,score) values('张三','语文',82)
insert into tb_RowConvertToColumn(username,course,score) values('张三','数学',85)
insert into tb_RowConvertToColumn(username,course,score) values('张三','外语',90)
insert into tb_RowConvertToColumn(username,course,score) values('李四','语文',86)
insert into tb_RowConvertToColumn(username,course,score) values('李四','数学',82)
insert into tb_RowConvertToColumn(username,course,score) values('李四','外语',92)
insert into tb_RowConvertToColumn(username,course,score) values('王五','语文',82)
insert into tb_RowConvertToColumn(username,course,score) values('王五','数学',94)
insert into tb_RowConvertToColumn(username,course,score) values('王五','外语',82) --1.静态sql行转列,该sql指定了转换的列头
select username 姓名,
MAX(case course when '语文' then score else 0 end) 语文,
MAX(case course when '数学' then score else 0 end) 数学,
MAX(case course when '外语' then score else 0 end) 外语
from tb_RowConvertToColumn
group by username
order by username
/*
姓名 语文 数学 外语
李四 86.00 82.00 92.00
王五 82.00 94.00 82.00
张三 82.00 85.00 90.00
*/ --2.静态sql行转列,该sql指定了转换的列头,该语句必须sqlserver2005及以上版本才能使用
select username 姓名,语文,数学,外语 from tb_RowConvertToColumn pivot(max(score) for course in(语文,数学,外语)) a
/*
姓名 语文 数学 外语
李四 86.00 82.00 92.00
王五 82.00 94.00 82.00
张三 82.00 85.00 90.00
*/
select * from tb_RowConvertToColumn pivot(max(score)for course in (语文,数学,外语)) a
/*
username 语文 数学 外语
李四 86.00 82.00 92.00
王五 82.00 94.00 82.00
张三 82.00 85.00 90.00
*/ --3.动态sql行转列,自动生成转换的列
declare @sql nvarchar(2000)
select distinct course into #tb_group from tb_RowConvertToColumn order by course desc--表头及排序
select @sql=ISNULL(@sql+',','')+'MAX(case course when '''+course+''' then score else 0 end) ['+course+']'
from #tb_group
set @sql='select username 姓名,'+@sql
+' from tb_RowConvertToColumn a'
+' group by username'
exec(@sql)
drop table #tb_group
/*
姓名 语文 外语 数学
李四 86.00 92.00 82.00
王五 82.00 82.00 94.00
张三 82.00 90.00 85.00
*/ --4.动态sql行转列,自动生成转换的列,该语句必须sqlserver2005及以上版本才能使用
declare @sql nvarchar(2000)
select @sql=ISNULL(@sql+',','')+course
from tb_RowConvertToColumn
group by course
set @sql='select * from tb_RowConvertToColumn pivot (max(score) for course in ('+@sql+')) a'
exec(@sql)
/*
username 数学 外语 语文
李四 82.00 92.00 86.00
王五 94.00 82.00 82.00
张三 85.00 90.00 82.00
*/
- sqlserver列转行
--创建列转行表及插入数据
create table tb_ColumnConvertToRow
(
[姓名] nvarchar(100) null,
[语文] nvarchar(100) null,
[数学] nvarchar(100) null,
[外语] nvarchar(100) null
) insert into tb_ColumnConvertToRow(姓名,语文,数学,外语) values('李四',82,92,86)
insert into tb_ColumnConvertToRow(姓名,语文,数学,外语) values('王五',94,82,82)
insert into tb_ColumnConvertToRow(姓名,语文,数学,外语) values('张三',85,90,82) --1.静态sql列转行,当列头较少时使用
select * from
(
select 姓名,课程='语文',分数=语文 from tb_ColumnConvertToRow
union all
select 姓名,课程='数学',分数=数学 from tb_ColumnConvertToRow
union all
select 姓名,课程='外语',分数=外语 from tb_ColumnConvertToRow
) a
/*
姓名 课程 分数
李四 语文 82
王五 语文 94
张三 语文 85
李四 数学 92
王五 数学 82
张三 数学 90
李四 外语 86
王五 外语 82
张三 外语 82
*/ --2.静态sql列转行,当列头较少时使用,该语句必须sqlserver2005及以上版本才能使用
select 姓名,课程,分数 from tb_ColumnConvertToRow unpivot(分数 for 课程 in (语文,数学,外语)) a
/*
姓名 课程 分数
李四 语文 82
李四 数学 92
李四 外语 86
王五 语文 94
王五 数学 82
王五 外语 82
张三 语文 85
张三 数学 90
张三 外语 82
*/
sqlserver行列转换的更多相关文章
- sqlserver行列转换问题(网上搜集)
(列->行) 一.FOR XML PATH 简单介绍 那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱好,表结构如 ...
- sqlserver 行列转换
http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html PIVOT用于将列值旋转为列名(即行转列),在SQL Server 200 ...
- SQLServer行列转换PIVOT函数中聚合函数的使用意义及选择
例子:https://blog.csdn.net/wikey_zhang/article/details/76849826 DECLARE @limitDay INT;SET @limitDay = ...
- [转载]SQL Server行列转换实现
可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_ ...
- 在Sqlserver下巧用行列转换日期的数据统计
在Sqlserver下巧用行列转换日期的数据统计 前言 在SQLSERVER 中有很多统计函数的基础语法,有使用Group By 或 partition by 后配合Sum,Count(*) 等用法. ...
- sqlserver表分区与调优与行列转换
转自: http://www.cnblogs.com/knowledgesea/p/3696912.html http://www.open-open.com/lib/view/open1418462 ...
- SQL 行列转换简单示例
SQLSERVER 2005 以后提供了新的方式进行行列转换,下面是一个实例供参考: if object_id('tb') is not null drop table tbTest go ),季度 ...
- SqlServer2000下实现行列转换
SqlServer2000下实现行列转换 2011-04-06 22:07:07| 分类: SQL Server | 标签:sqlserver 2000 行列转换 sql |举报|字号 订 ...
- 简单的叙述下SQL中行列转换的小知识!
行列转换对于工作还是学习中总是不可避免的会遇到(虽然本人还尚未工作,萌萌哒的学生一枚),解决的方法也有很多,我这里就总结一下我所想解决的问题以及怎么去解决的方法, 可能网上已经有很多类似的方法了,有的 ...
随机推荐
- Maximum Product Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- Solr5.3.1 SolrJ查询索引结果
通过SolrJ获取Solr检索结果 1.通过SolrParams的方式提交查询参数 SolrClient solr = new HttpSolrClient("http://localhos ...
- Mobile first! Wijmo 5 + Ionic Framework之:Hello World!
本教程中,我们用Wijmo 5 和 Ionic Framework实现一个Mobile的工程:Hello World. Ionic是什么? Ionic是一个HTML5框架.免费.开源,用于帮助生成hy ...
- 【python】捕获所有异常
如下所示,在不知道异常名的情况下可以捕获所有异常 try: a=b b=c except Exception,ex: print Exception,":",ex
- ubuntu修改文件访问权限
遇到“bash .....权限不够”的问题时, 从控制台进入到那个文件夹 chmod 777 * -R 全部子目录及文件权限改为 777
- mongodb数据结构学习1--增删改查
插入文档 在数据库中,数据插入是最基本的操作,在MongoDB使用db.collection.insert(document)语句来插入文档: document是文档数据,collection是存放文 ...
- MFC添加鼠标相应事件
Class View (类视图)窗口中选中 你要添加事件的类(比如C***View.CPP),切换到properties窗口. 点击上面的Message图标(在Event图标[一个闪电形状的图标] 右 ...
- Fedora install chrome
1)下载chrome:chrome download,选择rpm版,下载地址:https://dl.google.com/linux/direct/google-chrome-stable_curre ...
- ASP.Net核心对象之HttpResponse
简介: HttpResponse是对响应报文进行设置的一个对象.通过context. Response 能够得到HttpResponse对象. context.Response.Charset;//获 ...
- protostuff简单应用
protobuf是谷歌推出的与语言无关.平台无关的通信协议,一个对象经过protobuf序列化后将变成二进制格式的数据,所以他可读性差,但换来的是占用空间小,速度快.居网友测试,它的序列化效率是xml ...