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')
sql server行列转化和行列置换的更多相关文章
- (sql server)玩转-数据库行列转换
虽然开发过程中没用过行列转换,但是听说面试时常常会遇到这个问题,以前在网上也看到过大神的例子,今天自己仔细的玩了下,希望和大家分享一下了. 注意:列转行的方法可能是我独创的了,呵呵,因为在网上找不到哦 ...
- SQL server 2005 PIVOT运算符的使用
原文:SQL server 2005 PIVOT运算符的使用 PIVOT,UNPIVOT运算符是SQL server 2005支持的新功能之一,主要用来实现行到列的转换.本文主要介绍PIVOT运算符的 ...
- SQL Server中行列转换 Pivot UnPivot
SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- SQL SERVER 合并重复行,行列转换
引用自:http://www.cnblogs.com/love-summer/archive/2012/03/27/2419778.html sql server2000 里面如何实现oracle10 ...
- SQL Server 行列转换
/* 标题:普通行列转换(version 2.0) 作者:范中磊 说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql ...
- 使用SQL SERVER PIVOT实现行列转置
一般我们在使用SQL语句实现行列转置时候,最常用的方法无外乎就是 case语句来实现,但是如果需要需要转置的列太多,那么case起来语句就无限庞大,十分不方便,sql server中的PIVOT就可以 ...
- [转载]SQL Server行列转换实现
可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数(value_ ...
- sql server动态行列转换
原文链接:https://www.cnblogs.com/gaizai/p/3753296.html sql server动态行列转换 一.本文所涉及的内容(Contents) 本文所涉及的内容(Co ...
- SQL Server中行列转换
典型实例 一.行转列 1.建立表格 ifobject_id('tb')isnotnulldroptabletb go createtabletb(姓名varchar(10),课程varchar(10) ...
随机推荐
- .NET工程师必须掌握的知识点
Microsoft SQL Server 数据库 一.创建和维护数据库 1.数据库 SQL Server 数据库的组成部分?(参见联机丛书) 如何保证数据库的完整性.安全性.并发性? 数据库设计创建步 ...
- Page6:关于能控性、能观性、能测性及其判据(1)[Linear System Theory]
内容包含能控性和能测性的定义,连续时间线性时不变系统能控性和能观测性判据
- 转:ActiveMQ的作用总结(应用场景及优势)
原文地址: ActiveMQ的作用总结(应用场景及优势) 业务场景说明: 消息队列在大型电子商务类网站,如京东.淘宝.去哪儿等网站有着深入的应用, 队列的主要作用是消除高并发访问高峰,加快网站的响应速 ...
- python QT 编程之路
pyQT4 的Wheel 下载 https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyqt4 python发送GET 或者 POST请求 https://www ...
- swift 字体自适应,宽高自适应
let kScreenWidth = UIScreen.main.bounds.width let kScreenHeight = UIScreen.main.bounds.height public ...
- 教你一步步composer安装Magento2.3
以前外贸建站一直用zencart,这段时间ytkah比较有时间,就决定用magento来创建一下站点.magento不像普通的程序一样下载就可以直接安装,需要借助composer安装,还没没compo ...
- HBase 的MOB压缩分区策略介绍
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zNZQhb07Nr/article/details/79832392 HBase应用场景很广泛.社区 ...
- MySQL 8.0.11 报错[ERROR] [MY-011087] Different lower_case_table_names settings for server ('1')
--报错信息: 2018-06-07T19:52:26.943083+08:00 0 [System] [MY-010116] [Server] /usr/local/mysql/bin/mysqld ...
- dxRatingControl使用
Properties AllowHover:是否鼠标滑动选择 CheckedGlyph:选中后显示的图像 Glyph:显示的图像 HoverGlyph:鼠标滑动时显示的图像 ItemCount:项目总 ...
- Oracle(2)之多表查询&子查询&集合运算
多表查询 笛卡尔积 同时查询多张表时,每张表的每条数据都要和其它表的每条数据做组合.如下栗子,我们发现产生的总记录数是 56 条,还发现 emp 表是 14 条,dept 表是 4 条,56 条正是 ...