在数据库操作过程中,偶尔会使用到《行转列》查询;下面介绍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 计算方差 |
8 | CHECKSUM_AGG |
9 | COUNT_BIG |
10 | STDEVP |
11 | GROUPING |
12 | GROUPING_ID |
13 | VARP |
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
更多推荐
SQL SERVER 行转列 PIVOT 用法及解释
发布评论