最近在做项目过程中,遇到一个常用知识点,想要和大家分享一下,就是行列转换:
我分享的是pivot操作符这种方法。
基本语法:
SELECT *
FROM (
SELECT column_name, pivot_column, value_column
FROM your_table
)
PIVOT (
aggregate_function(value_column)
FOR pivot_column IN (pivot_value1, pivot_value2, ...)
);
--column_name 是你希望保留的列。
--pivot_column 是你希望转换为列头的列。
--value_column 是包含要转换为列值的数据的列。
--aggregate_function 是你希望对 value_column 中的数据执行的聚合函数, 例如 sum,avg,max,min等
--pivot_value1, pivot_value2, ... 是 pivot_column 中可能出现的值,这些值将转换为列头。
举例说明:
假设我们有一个销售数据表 sales ,其中包含 year , product , 和 amount 三个字段。我们想要将每年的销售额按产品分类进行汇总,转换为列。
sql写法:
SELECT *
FROM (
SELECT year, product, amount
FROM sales
)
PIVOT (
SUM(amount)
FOR product IN ('ProductA' AS ProductA, 'ProductB' AS ProductB, 'ProductC' AS ProductC)
);
这个查询会生成一个结果集,其中包含每一年的 ProductA , ProductB , 和 ProductC 的销售额。
----注意事项:
1.PIVOT 操作符要求 pivot_column 和 value_column 必须是数值类型或日期类型。
2.PIVOT 操作符不支持动态列名,即你必须在查询中明确指定 pivot_value 。