189 8069 5689

SQLServer中怎么将行数据转换为列数据

今天就跟大家聊聊有关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   ()    as  pivot (   () for  []    in ( [first pivoted column], [second pivoted column],   ... [last pivoted column]) ) as  ;

语法解析

非聚合列。

[first pivoted column]

第一列列名。

[second pivoted column]

第二列列名。

[last pivoted column]

最后一列列名。