下面介绍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. 聚合函数

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 ) A
PIVOT (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 Student GROUP BY NAME

