小工具知识网

当前位置: 首页 > 行业知识 > SQL中PIVOT函数的用法

行业知识

SQL中PIVOT函数的用法

2026-11-03 07:16:14 来源:互联网转载

文章目录

  • 前言
  • 1. SQL Server
  • 2. MySQL
  • 3. Oracle

    前言

    PIVOT 是 SQL Server 中的一个功能,用于将行转换为列。然而,MySQL 和 Oracle 不直接支持 PIVOT 语法。但是,你可以使用条件聚合或其他技术来模拟 PIVOT 的行为。

    语法:

    -- 从子查询中选择数据,子查询从源表中选择需要的数据  SELECT ...    FROM        (        -- 源查询,从源表中选取你希望进行PIVOT操作的列        SELECT ...          FROM         -- 可以包含WHERE子句、GROUP BY子句等以筛选或组织数据     ) AS SourceTable      -- PIVOT操作,将行数据转换为列数据  PIVOT       (        -- 聚合函数,用于计算每个新列的值        aggregate_function()          -- 指定要进行转换的列名        FOR            -- 指定转换后新列的名称列表        IN ([first_pivoted_column], [second_pivoted_column], ...)     ) AS PivotTable;

    以下是如何在 SQL Server、MySQL 和 Oracle 中实现类似 PIVOT 的操作的示例。

    1. SQL Server

    假设你有一个名为 sales 的表,其中包含 year, product, 和 amount 三个字段:

    sql:

    CREATE TABLE sales (      year INT,      product VARCHAR(50),      amount DECIMAL(10, 2)  );    INSERT INTO sales (year, product, amount) VALUES  (2020, 'A', 100),  (2020, 'B', 200),  (2021, 'A', 150),  (2021, 'B', 250);

    你可以使用 PIVOT 来转换数据:

    SELECT *  FROM (      SELECT year, product, amount      FROM sales  ) AS source_table  PIVOT (      SUM(amount)      FOR product IN ([A], [B])  ) AS pivot_table;

    这将返回:

    yearAB
    2020100.0200.0
    2021150.0250.0

    2. MySQL

    在 MySQL 中,你可以使用条件聚合来模拟 PIVOT:

    SELECT year,         SUM(CASE WHEN product = 'A' THEN amount ELSE 0 END) AS 'A',         SUM(CASE WHEN product = 'B' THEN amount ELSE 0 END) AS 'B'  FROM sales  GROUP BY year;

    这将返回与 SQL Server 相同的结果。

    3. Oracle

    在 Oracle 中,你也可以使用条件聚合:

    SELECT year,         SUM(CASE WHEN product = 'A' THEN amount ELSE 0 END) AS "A",         SUM(CASE WHEN product = 'B' THEN amount ELSE 0 END) AS "B"  FROM sales  GROUP BY year;

    这将返回与 SQL Server 和 MySQL 相同的结果。

    请注意,虽然上述查询在逻辑上模拟了 PIVOT 的行为,但它们并不是真正的 PIVOT 语法。如果你需要在多个列或动态列上进行转换,那么你可能需要构建更复杂的查询或使用存储过程来动态生成 SQL。

上一篇:ps图片怎么对折?

下一篇:自适应网站怎么优化?