今天就跟大家聊聊有关SQL Server中怎么将行数据转换为列数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
站在用户的角度思考问题,与客户深入沟通,找到石柱土家族网站设计与石柱土家族网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、成都做网站、企业官网、英文网站、手机端网站、网站推广、域名注册、网站空间、企业邮箱。业务覆盖石柱土家族地区。准备工作
创建表
use [test1]gocreate 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,( ) from database.schema.tablegroup 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, [first pivoted column] as , [second pivoted column] as , ... [last pivoted column] as from (
语法解析
非聚合列。
[first pivoted column]
第一列列名。
[second pivoted column]
第二列列名。
[last pivoted column]
最后一列列名。
数据子表。
表别名。
聚合函数。
聚合函数列,用于输出值列,最终输出中返回的列(称为分组列)将对其进行分组。
[
转换列,此列返回的值将成为最终结果集中的字段。
[first pivoted column], [second pivoted column], ... [last pivoted column]
数据行中每一行行要转换的列名。
排序规则。
示例
select b.Name,b.[android],b.[ios],b.[html5],b.[.net] from (select Name,Project,Score from [test1].[dbo].[student])as apivot( max(Score) for Project in ([android],[ios],[html5],[.net])) as border by b.name desc
1、如果输出列名不能在表转换列中,则不会执行任何计算。
2、输出的所有列的列名的数据类型必须一致。
看完上述内容,你们对SQL Server中怎么将行数据转换为列数据有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。