SQLServer基础之行数据转换为列数据

准备工作

成都创新互联专注于网站建设|企业网站维护|优化|托管以及网络推广,积累了大量的网站设计与制作经验,为许多企业提供了网站定制设计服务,案例作品覆盖发电机回收等行业。能根据企业所处的行业与销售的产品,结合品牌形象的塑造,量身开发品质网站。

创建表

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,
() 
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

示例结果

转换前

SQL Server基础之行数据转换为列数据

转换后

SQL Server基础之行数据转换为列数据

使用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]

数据行中每一行行要转换的列名。

排序规则。

示例

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

示例结果

转换前

SQL Server基础之行数据转换为列数据

转换后

SQL Server基础之行数据转换为列数据

注意事项

1、如果输出列名不能在表转换列中,则不会执行任何计算。

2、输出的所有列的列名的数据类型必须一致。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对创新互联的支持。


当前文章:SQLServer基础之行数据转换为列数据
网页地址:http://bzwzjz.com/article/pscgch.html
Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 四川成都网站建设 响应式网站设计 手机网站建设 网站制作 成都网站建设 重庆手机网站建设 网站设计公司 攀枝花网站设计 外贸营销网站建设 成都网站制作 品牌网站建设 古蔺网站建设 成都网站建设 温江网站设计 网站制作 四川成都网站设计 网站建设改版 响应式网站设计 网站制作 成都模版网站建设 定制级高端网站建设 成都品牌网站建设