sqlserver列数据拆分(SQL Server基础之行数据转换为列数据)
sqlserver列数据拆分
SQL Server基础之行数据转换为列数据准备工作
创建表
use [test1] go create table [dbo].[student]( [id] [int] identity(1,1) not null, [name] [nvarchar](50) null, [project] [nvarchar](50) null, [score] [int] null, constraint [pk_student] primary key clustered ( [id] asc )with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary] ) on [primary] go
插入数据
insert into test1.dbo.student(name,project,score) values('张三','android','60'), ('张三','ios','70'), ('张三','html5','55'), ('张三','.net','100'), ('李四','android','60'), ('李四','ios','75'), ('李四','html5','90'), ('李四','.net','100');
使用Case When和聚合函数进行行专列
语法
select column_name, <aggregation function>(<case when expression>) from database.schema.table group by column_name
语法解析
column_name
数据列列名
aggregation function
聚合函数,常见的有:sum,max,min,avg,count等。
case when expression
case when表达式
示例
select name, max(case project when 'android' then score end) as '安卓', max(case project when 'ios' then score end) as '苹果', max(case project when 'html5' then score end) as 'html5', max(case project when '.net' then score end) as '.net' from [test1].[dbo].[student] group by name
示例结果
转换前
转换后
使用PIVOT进行行专列
PIVOT通过将表达式中一列中的唯一值转换为输出中的多个列来旋转表值表达式。并PIVOT在最终输出中需要的任何剩余列值上运行聚合,PIVOT提供比一系列复杂的SELECT...CASE语句指定的语法更为简单和可读的语法,PIVOT执行聚合并将可能的多行合并到输出中的单个行中。
语法
select <non-pivoted column>, [first pivoted column] as <column name>, [second pivoted column] as <column name>, ... [last pivoted column] as <column name> from (<select query that produces the data>) as <alias for the source query> pivot ( <aggregation function>(<column being aggregated>) for [<column that contains the values that will become column headers>] in ( [first pivoted column], [second pivoted column], ... [last pivoted column]) ) as <alias for the pivot table> <optional order by clause>;
语法解析
<non-pivoted column>
非聚合列。
[first pivoted column]
第一列列名。
[second pivoted column]
第二列列名。
[last pivoted column]
最后一列列名。
<select query that produces the data>
数据子表。
<alias for the source query>
表别名。
<aggregation function>
聚合函数。
<column being aggregated>
聚合函数列,用于输出值列,最终输出中返回的列(称为分组列)将对其进行分组。
[<column that contains the values that will become column headers>]
转换列,此列返回的唯一值将成为最终结果集中的字段。
[first pivoted column], [second pivoted column], ... [last pivoted column]
数据行中每一行行要转换的列名。
<optional order by clause>
排序规则。
示例
select b.Name,b.[android],b.[ios],b.[html5],b.[.net] from (select Name,Project,Score from [test1].[dbo].[student]) as a pivot ( max(Score) for Project in ([android],[ios],[html5],[.net]) ) as b order by b.name desc
示例结果
转换前
转换后
注意事项
1、如果输出列名不能在表转换列中,则不会执行任何计算。
2、输出的所有列的列名的数据类型必须一致。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。
- SqlServer生成连续数字根据指定的数字操作(SqlServer生成连续数字根据指定的数字操作)
- sqlserver恢复delete数据(SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢)
- SQLServer中使用扩展事件获取Session级别的等待信息及SQLServer 2016中Session级别等待(SQLServer中使用扩展事件获取Session级别的等待信息及SQLServer 2016中Session级别等待)
- sqlserver字符串判断函数(解决sql server保存对象字符串转换成uniqueidentifier失败的问题)
- sqlserver新建连接服务器卡住(SQL Server成功与服务器建立连接但是在登录过程中发生错误的快速解决方案)
- sqlserver查询自定义时间数据(SQLServer查询某个时间段购买过商品的所有用户)
- SqlServer 表单查询问题及解决方法(SqlServer 表单查询问题及解决方法)
- sqlserver安装与使用教程(SQL Server 2017 Developer的下载、安装、配置及SSMS的下载安装配置图文教程详解)
- SqlServer 英文单词全字匹配详解及实现代码(SqlServer 英文单词全字匹配详解及实现代码)
- sqlserver降序排列(SQL SERVER临时表排序问题的解决方法)
- sqlserver创建表结构时添加约束(SQL Server 通过with as方法查询树型结构)
- sqlserver备份还原数据(通过Windows批处理命令执行SQL Server数据库备份)
- sqlserver存储删除过程(Sql中存储过程的定义、修改和删除操作)
- sqlserver数据类型和长度(SqlServer 数据库 三大 范式)
- sqlserver2008远程连接设置(如何开启SqlServer 远程访问)
- sqlserver怎么手动添加数据库表(SQL Server 数据库调整表中列的顺序操作方法及遇到问题)
- 袁冰妍终于接到新剧,饰演反追男主,看到合作演员 眼光果然毒辣(袁冰妍终于接到新剧)
- 记忆中的台词(记忆中的台词)
- 袁冰妍轧戏 拍《琉璃》的同时还在拍《将夜》,难怪被骂演技差(拍琉璃的同时还在拍将夜)
- 刚红就耍大牌,《琉璃》角色滤镜碎一地,心疼工作人员(琉璃角色滤镜碎一地)
- 袁冰妍郑业成这对可以处,有脸红情话他们是真的敢说(袁冰妍郑业成这对可以处)
- 《祝卿好》台词又土又甜,就喜欢这么直接的恋爱(祝卿好台词又土又甜)
热门推荐
- python里range循环(Python for循环与range函数的使用详解)
- vuejs filter过滤器的使用(Vue过滤器filter实现及应用场景详解)
- IEnumerable、GetEnumerator、IEnumerator之间的关系
- filter的用法css(CSS filter 有什么神奇用途)
- sqlserver2016使用教程(SQL Server 2016 Alwayson新增功能图文详解)
- 知乎上的35条神回复(75条笑死人的知乎神回复,用60行代码就爬完了)
- vue树形表格内容太长(VUE 无限层级树形数据结构显示的实现)
- python零基础入门详细教程(Python零基础入门学习之输入与输出)
- laravel图文分离(Laravel 5.4前后台分离,通过不同的二级域名访问方法)
- 阿里云服务器内外网址(阿里云服务器网站发现后门该怎么处理)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9