喔唷网 - 网络从业者技术信息综合门户!

当前位置: 主页 > 教程技术 > 数据库 > MsSQL

SQL中行转列函数 Povit 使用方法详解

时间 : 2025-04-21 14:40来源 : 喔唷网作者 : 喔唷网点击 :
SQL PIVOT 函数 PIVOT 是 SQL 中的一种操作,用于将行数据转换为列数据(行转列),常用于数据透视和交叉表报表。 同时也可以用此函数实现类似于Excel中的数据透视表的效果。 一、 PIVOT 函数的基本用法

SQL PIVOT 函数 PIVOT 是 SQL 中的一种操作,用于将行数据转换为列数据(行转列),常用于数据透视和交叉表报表。同时也可以用此函数实现类似于Excel中的数据透视表的效果。

一、PIVOT函数的基本用法:

SELECT [非透视列],
       [第一个透视列] AS [列别名],
       [第二个透视列] AS [列别名],
       ...
FROM
    (SELECT [查询列] FROM [表]) AS [源表别名]
PIVOT
(
    [聚合函数]([聚合列])
    FOR [透视列] IN ([第一个透视值], [第二个透视值], ...)
) AS [透视表别名]

用于展示PIVOT函数的用法我们建立了一个基本数据表,假设有一个销售数据表 Sales:

下面使用函数进行转换,将数据表中的数据行转换为列。

SELECT Product, Q1, Q2
FROM 
(
    SELECT Product, Quarter, Amount
    FROM Sales
) AS SourceTable
PIVOT
(
    SUM(Amount)
    FOR Quarter IN (Q1, Q2)
) AS PivotTable;

转换后的表状态视图:

| Product | Q1  | Q2  |
|---------|-----|-----|
| A       | 100 | 200 |
| B       | 150 | 250 |

PIVOT 的反向操作是 UNPIVOT,用于将列转为行。PIVOT 需要指定明确的透视值列表通常需要配合聚合函数使用(SUM, AVG, COUNT等)动态PIVOT在大多数数据库中需要使用动态SQL实现对于大数据集,PIVOT操作可能会影响性能。注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需满足数据库的兼容级别,需要兼容级别大于90,否则计算出的结果可能会与上面的截图不同。

查询兼容级别语法如下:
SELECT compatibility_level FROM sys.databases WHERE name = '数据库名';

如果你是跟着上述代码生成的测试数据,则数据表是一张临时表,所以对应的数据库名是Tempdb,
SELECT compatibility_level FROM sys.databases WHERE name = 'Tempdb';

修改兼容级别语法如下:
ALTER DATABASE 数据库名 SET COMPATIBILITY_LEVEL = 90(必须是当前数据库版本范围内的兼容级别)
不同数据库版本支持的兼容级别如下:


栏目列表

关联类容

热点推荐

栏目推荐

猜你喜欢