在数据库操作过程中,偶尔会使用到《行转列》查询;下面介绍Sql server 中常用的行转列操作;

1.语法

    PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现

    PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P

完整语法:

table_source

PIVOT( 

聚合函数(value_column)FOR pivot_column  IN (<column_list>)

)

2.聚合函数

排序函数
1

AVG 平均值

2

MIN 最小值

3

MAX 最大值

4

SUM 求和值

5

count(count_big)统计项数值

6

STDEV 计算标准偏差值

7

VAR 计算方差

8CHECKSUM_AGG
9COUNT_BIG
10STDEVP
11GROUPING 
12GROUPING_ID
13VARP

 

3.举例

2.1创建一张Student 表:​​​​​​

CREATE TABLE Student(  [Name] [nvarchar](50) NULL,  [Sex] [nvarchar](10) NULL,  [Age] [nvarchar](50) NULL,  [Grade] [nvarchar](50) NULL,  [Clasee] [nvarchar](50) NULL,  [Score] [decimal](18, 2) NULL,)

2.2 插入数据

    ​​​​

INSERT Student(Name,Sex,Age,Grade,Clasee,Score)VALUES('小红','女','12','5','数学','90'),('小红','女','12','5','语文','89'),('小红','女','12','5','英语','95'),('小蓝','男','13','5','数学','93'),('小蓝','男','13','5','语文','87'),('小蓝','男','13','5','英语','92'),('小花','女','11','5','英语','91'),('小花','女','11','5','数学','85'),('小花','女','11','5','语文','92')

2.3 按行查询学生名字,列举出 数学,语文,英语成绩

    方法1:使用 PIVOT

SELECT * FROM(SELECT Name,Clasee,Score FROM Student ) APIVOT (MAX(Score) FOR Clasee IN ([数学],[语文],[英语])) B

   

 方法2:使用CASE​​​​​​​

SELECT Name,MAX(CASE WHEN Clasee='数学' THEN Score ELSE 0 END) AS [数学],MAX(CASE WHEN Clasee='语文' THEN Score ELSE 0 END) AS [语文],MAX(CASE WHEN Clasee='英语' THEN Score ELSE 0 END) AS [英语]FROM StudentGROUP BY NAME

更多推荐

SQL SERVER 行转列 PIVOT 用法及解释