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、输出的所有列的列名的数据类型必须一致。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。
- centos系统mysql安装及连接教程(CentOS8安装SQLServer2019的过程)
- SqlServer GO命令循环使用实例代码(SqlServer GO命令循环使用实例代码)
- sqlserver删除表的第一行数据(sql server删除前1000行数据的方法实例)
- sql server建表语句带字段说明(SqlServer给表增加多个字段的语法)
- sql server优化性能(SQLServer地址搜索性能优化)
- sqlserver常用函数(SQLServer 日期函数大全小结)
- sqlserver 怎么建立触发器(SQL Server:触发器实例详解)
- sqlserver字段说明(详解SQL Server 中 JSON_MODIFY 的使用)
- 阿里云sql server 2012(远程连接阿里云SqlServer 2012 数据库服务器的图文教程)
- sqlserver如何生成xml文件(实现SQL Server 原生数据从XML生成JSON数据的实例代码)
- sqlserver 空间数据类型(SQL Server数据类型转换方法)
- sqlserver 使用SSMS运行sql脚本的六种方法(sqlserver 使用SSMS运行sql脚本的六种方法)
- sqlserver模糊查询使用定义的字段(SQL Server模糊查询的常见方法总结)
- sqlserver中有几种锁定模式(SQL Server 开窗函数 Over代替游标的使用详解)
- sqlserver存储过程参数默认值(sql server使用临时存储过程实现使用参数添加文件组脚本复用)
- sqlserver基本知识(sql server学习基础之内存初探)
- 如何快速赚钱(如何快速赚钱方法真实有效)
- 这里输入关键词(如何输入关键词)
- 熊猫中国国宝(熊猫国宝酒53酱香)
- 春节会放假几天(春节会放假吗)
- 小浴室,大民生 缙云3200多户困难群众洗上免费热水澡(小浴室大民生缙云3200多户困难群众洗上免费热水澡)
- 元旦闲谭(元旦闲谭)
热门推荐
- js获取子表单所有数据(JavaScript实现异步提交表单数据)
- nodejs部署上传文件(node.js使用express-fileupload中间件实现文件上传)
- javascript中的this判定(Javascript中函数分类&this指向的实例详解)
- 安装apache服务失败怎么办(Apache安装后出现服务无法启动服务里启动出现错误代码1)
- mysql 分库分表步骤(MySQL读多写少设计方案 - 分库分表还能这么做?)
- linux nginx部署前端项目(nginx部署多前端项目的几种方法)
- Ext.query与Ext.select 的用法
- 怎么调input搜索框边框颜色(使用placeholder属性设置input文本框的提示信息)
- dedecms简短标题(dedecms文章列表实现序列号排序效果实现代码)
- javascript写游戏脚本(原生JS实现飞机大战小游戏)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9