sql server行列转化和行列置换
- 行列转换:
- 姓名 课程 分数
- 张三 语文 74
- 张三 数学 83
- 张三 物理 93
- 李四 语文 74
- 李四 数学 84
- 李四 物理 94
- 想变成(得到如下结果):
- 姓名 语文 数学 物理
- ---- ---- ---- ----
- 李四 74 84 94
- 张三 74 83 93
- create table sc(姓名 varchar(10),课程 varchar(10),分数 float)
- insert into sc
- select '张三','语文',74
- union
- select '张三','数学',83
- union
- select '张三','物理',93
- union
- select '李四','语文',74
- union
- select '李四','数学',84
- union
- select '李四','物理',94
- 方法1:
- declare @sql varchar(max)
- set @sql='select '
- select @sql=@sql+', max(case when 课程='''+课程+''' then 分数 else '''' end)['+课程+']' from (select distinct 课程 from sc)t
- set @sql = STUFF(@sql,8,1,'')
- print @sql
- set @sql=@sql+' ,姓名 from sc group by 姓名'
- exec(@sql)
- 方法2:
- select 姓名,数学,物理,语文 from sc pivot( max(分数) for 课程 in(数学,物理,语文))t
- 方法3:
- declare @sql varchar(8000)
- select @sql = isnull(@sql + '],[' , '') + 课程 from sc group by 课程
- print @sql
- set @sql = '[' + @sql + ']'
- exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
行列置换:
- 姓名 语文 数学 物理
- ----------------------------------
- 张三 80 90 85
- 李四 85 92 82
- 要求使用T-SQL语言实现以下结果:
- 课程 张三 李四
- ----------------------
- 语文 80 85
- 数学 90 92
- 物理 85 82
- drop table sc
- create table sc(姓名 varchar(10),语文 int,数学 int,物理 int)
- insert into sc
- select '张三',80,90,85
- union all
- select '李四',85,92,82
- select * from sc
- -------------这个过程不就是unpivot,有时间再补充?
- select * into sc1 from(
- select 姓名,'语文' 课程,语文 分数 from sc
- union
- select 姓名,'数学' 课程,数学 from sc
- union
- select 姓名,'物理' 课程,物理 from sc
- )t
- 补充unpivot,和上面操作时同样的效果
- select 姓名,课程,分数 into #sc1 from sc unpivot(分数 for 课程 in([语文],[数学],[物理]))a
- declare @sql varchar(8000)
- set @sql='select '
- select @sql=@sql+', max(case when 姓名='''+姓名+''' then 分数 else ''''end)['+姓名+']' from (select distinct 姓名 from
- sc1)t
- set @sql=stuff(@sql,8,1,'')
- set @sql=@sql+' ,课程 from sc1 group by 课程'
- print @sql
- exec(@sql)
- 补充动态pivot和unpiot
- --------------pivot
- declare @sql varchar(8000)
- select @sql = isnull(@sql + '],[' , '') + 课程 from tb group by 课程
- print @sql
- set @sql = '[' + @sql + ']'
- exec ('select * from (select * from tb) a pivot (max(分数) for 课程 in (' + @sql + ')) b')
- --------------unpivot
- declare @sql varchar(8000)
- select @sql = isnull(@sql + '],[' , '') + name from syscolumns where id=OBJECT_ID('tb') and colorder>1
- set @sql = '[' + @sql + ']'
- exec ('select 姓名,课程,分数 from (select * from tbtb) a unpivot (分数 for 课程 in (' + @sql + ')) b')
转载于:https://www.cnblogs.com/Impulse/articles/5129319.html
sql server行列转化和行列置换相关推荐
- Sql Server 2005 PIVOT的行列转换应用实例
文章来源: http://ningoo.itpub.net/post/2149/281485 创建测试表,插入测试数据 Code create table test(id int,name varch ...
- SQl SerVer 数据库转化字母大小写
正品水晶 转化大小写的函数(将大写转换成小写,小写转换成大写) selectdbo.F_Transition('Acc2DE5G') 输出 aCC2de5g alter function [dbo]. ...
- [转载]SQL Server行列转换实现
一.Pivot和UnPivot介绍 1.Pivot介绍 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVO ...
- SQL Server 2005之PIVOT/UNPIVOT行列转换
SQL Server 2005之PIVOT/UNPIVOT行列转换 作者: NinGoo(http://ningoo.itpub.net) 发表于: 2007.04.18 11:49 分类: SQL ...
- SQL Server中行列转换 Pivot UnPivot (转载)
SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现PIVOT的一般语法是:PIV ...
- 在SQL Server 2005中实现表的行列转换()
PIVOT和UNPIVOT关系运算符是SQL Server 2005提供的新增功能,因此,对升级到SQL Server 2005的数据库使用PIVOT和UNPIVOT时,数据库的兼容级别必须设置为90 ...
- 【转】SQL Server中行列转换 Pivot UnPivot
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P ...
- SQL Server中行列转换 Pivot UnPivot
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P ...
- 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化
2010-01-12 从Sql server 2000 到 Oracle 10g数据库迁移数据类型转化 文章分类:数据库 SqlServer 2k转换为Oracle 10g 列名 SqlServer数 ...
最新文章
- Pytorch中的广播机制
- 火爆 GitHub!这个 AI 神器究竟有什么魅力?
- 用pkg给手机装linux,pkg-config的使用方法
- Linux-下载传输并安装启动Tomcat
- matlab 状态估计,基于_当前_统计模型的目标状态估计MATLAB 实现
- java 格式化小数_java-如何格式化小数位数精度
- [转载] Java字符串分割方法
- 强化学习《基于策略 - on plolicy - off plolicy》
- mysql ajax excel文件_关于导入EXCEL和AJAX
- python输出命令_Python中的命令输出解析
- CSDN、博文视点名家讲坛之夏昕、林信良谈Spring框架
- 高考数学47分学计算机,从57分到高考数学131分,4个月的时间我竟创造了这个传奇!...
- win7打开计算机一片空白,Win7系统打开文件夹查看选项发现一片空白怎么办
- 你是如何看待saas行业
- “渴了么”软件详细说明书
- LibVLC —— 本地音视频例子、Qt播放例子
- 前端异常监控平台对比
- 《女侦探司马楠之箱尸谜案》横店开机 花潼冯荔军热血联手破奇案
- ipad上创建html5文件,为 iBooks Author 创建 HTML5 小组件
- java 图片加密