媒介
PIVOT 是 SQL Server 中的一个功能,用于将行转换为列。然而,MySQL 和 Oracle 不直接支持 PIVOT 语法。但是,你可以利用条件聚合或其他技术来模仿 PIVOT 的行为。
语法:
- -- 从子查询中选择数据,子查询从源表中选择需要的数据
- SELECT ...
- FROM
- (
- -- 源查询,从源表中选取你希望进行PIVOT操作的列
- SELECT ...
- FROM <source_table>
- -- 可以包含WHERE子句、GROUP BY子句等以筛选或组织数据
- ) AS SourceTable
-
- -- PIVOT操作,将行数据转换为列数据
- PIVOT
- (
- -- 聚合函数,用于计算每个新列的值
- aggregate_function(<column_value>)
- -- 指定要进行转换的列名
- FOR <column_name>
- -- 指定转换后新列的名称列表
- 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;
复制代码 这将返回:
yearAB2020100.0200.02021150.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。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |