关键词

SQL基础教程之行转列Pivot函数

当我们从数据库中提取数据时,有时数据都显示为一列一列的。但是,我们可能需要将一些列转化为行,这就需要用到Pivot函数。本文主要介绍SQL Server数据库中的Pivot函数的基础用法。

1.什么是Pivot函数

Pivot函数是SQL Server提供的用于转化数据表结构的函数。它可以将一列或多列数据整理成一个新的行列结构的表。 Pivot函数在交叉列和汇总数据时特别有用。

2.语法

Pivot函数具体的语法如下:

SELECT column_list
FROM table_name
PIVOT (aggregate_function(column_to_aggregate)
FOR pivot_column
IN (pivot_column_values))
AS pivot_table

3.示例1

假设我们有一个销售表格,它把销售数据以以下形式列出,每一行都代表一笔交易,包括日期、销售员、产品和销售数量。

销售日期 销售员 产品 销售数量
2020-05-01 Tom A 10
2020-05-01 Tom B 20
2020-05-01 Bob A 30
2020-05-02 Bob B 50
2020-05-02 Alice A 40
2020-05-02 Charlie B 70

现在,我们想把它转化成一个新的表,其中每一行代表一个销售员和他们对应的产品销售数据。

销售员 A B
Tom 10 20
Bob 30 50
Alice 40 NULL
Charlie NULL 70

使用Pivot函数的SQL语句如下:

SELECT [Sales Person], [A], [B]
FROM 
(SELECT [Sales Person], Product, [Sales Quantity] 
FROM SalesTable) AS ST
PIVOT
(
SUM([Sales Quantity])
FOR Product IN ([A], [B])
) AS PT;

4.示例2

假设我们有另一个用户活动表,其中包含每个用户在每天开始前的活动数量。

用户 日期 活动
Alice 2020-05-01 10
Alice 2020-05-02 20
Bob 2020-05-01 15
Bob 2020-05-02 30

现在,我们想把这个表格转换成下面这个格式,其中每一行都代表一个日期,列代表每个用户的活动数量:

日期 Alice Bob
2020-05-01 10 15
2020-05-02 20 30

对于这个需要使用Pivot函数的SQL如下:

SELECT [Activity Date], [Alice], [Bob]
FROM 
(SELECT [User], Activity, [Activity Date] 
FROM ActivityTable) AS AT
PIVOT
(
SUM([Activity])
FOR [User] IN ([Alice], [Bob])
) AS PT;

结论

Pivot函数是一种非常方便的SQL函数,使用它可以使数据的处理变得更加简便。通过本文的介绍,相信大家会更加深入地理解这个函数在数据处理中的应用。

本文链接:http://task.lmcjl.com/news/17182.html

展开阅读全文