你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

SQL SERVER 行转列 PIVOT 用法及解释

2022/8/29 14:42:58

下面介绍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