行列转换函数

Posted 点点滴滴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了行列转换函数相关的知识,希望对你有一定的参考价值。

PIVOT函数与UNPIVOT函数的运用

PIVOT用于将行转为列,完整语法如下:
TABLE_SOURCE
PIVOT(
聚合函数(value_column)
FOR pivot_column
IN(<column_list>)
)


UNPIVOT用于将列转为行,完整语法如下:
完整语法:
TABLE_SOURCE

UNPIVOT(

value_column

FOR pivot_column

IN(<column_list>)
)

以上语法可以理解为value_column字段与pivot_column字段的行列(列行)转换,pivot_column字段显示的列/行为column_list

 

--建张表Table_A

create table Table_A(name varchar(8),Math int,English int,Chinese int)
insert into Table_A values(\'小A\',80,90,88)
insert into Table_A values(\'小B\',70,90,85)
insert into Table_A values(\'小C\',75,95,85)
insert into Table_A values(\'小D\',80,90,75)

--原始表数据

select * from Table_A

name Math English Chinese
小A 80 90 88
小B 70 90 85
小C 75 95 85
小D 80 90 75
 

--UNPIVOT用于将列转为行

select Subject,name,Grade from Table_A
unpivot(Grade for Subject in ([Math],[English],[Chinese])) as s

--如果上面不能执行,用下面这个

select Subject,name,Grade from Table_A
unpivot(Grade for Subject in (Math,English,Chinese))

Subject name Grade
Math 小A 80
English 小A 90
Chinese 小A 88
Math 小B 70
English 小B 90
Chinese 小B 85
Math 小C 75
English 小C 95
Chinese 小C 85
Math 小D 80
English 小D 90
Chinese 小D 75
 

--PIVOT函数用于将行转为列

select * from
(
    select Subject,name,Grade from Table_A
    unpivot(Grade for Subject in ([Math],[English],[Chinese])) as s
) as a
pivot(sum(Grade) for name in ([小A],[小B],[小C],[小D])) as b

 
Subject 小A 小B 小C 小D
Chinese 88 85 85 75
English 90 90 95 90
Math 80 70 75 80
 

实现多行多列转换,请参考:http://www.cnblogs.com/hbwy/p/4359209.html

以上是关于行列转换函数的主要内容,如果未能解决你的问题,请参考以下文章

Pandas行列转换的4大技巧

sql行列转换和累加问题~~~

如何实现excel数据抽取并转换行列?

[高分悬赏] sql 行列转换 请高人指点

SQL 行列转换问题,请高手指点。

sql server行列转换问题