ToB企服应用市场:ToB评测及商务社交产业平台
标题:
SQL中PIVOT函数的用法
[打印本页]
作者:
用多少眼泪才能让你相信
时间:
2024-8-13 22:24
标题:
SQL中PIVOT函数的用法
媒介
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企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4