PIVOT函数
时间: 2025-03-18 18:25:13 浏览: 42
### SQL PIVOT 函数使用方法
PIVOT 是一种强大的 SQL 功能,主要用于将行数据转换为列数据(即所谓的“行转列”)。这种功能特别适用于生成报表或将结构化数据重新排列成更易于分析的形式。
#### 基本语法
以下是 `PIVOT` 的基本语法:
```sql
SELECT <non-pivoted column>,
[<pivoted column> AS <column name>]...
FROM (
SELECT <columns to be pivoted and non-pivoted columns>
FROM <source table>) AS SourceTable
PIVOT (
AGGREGATE_FUNCTION(<column being aggregated>)
FOR <column containing values to pivot> IN (<distinct value list>)
) AS PivotTable;
```
其中:
- `<non-pivoted column>` 表示不需要被旋转的列。
- `<pivoted column>` 则表示要进行旋转操作的具体列名及其对应的聚合值名称。
- `AGGREGATE_FUNCTION()` 可以是任何标准的聚合函数,比如 SUM() 或 COUNT()[^1]。
#### 实际案例演示
假设有一个销售记录表 `Sales` 如下所示:
| Year | Quarter | Sales |
|------|---------|-------|
| 2020 | Q1 | 100 |
| 2020 | Q2 | 150 |
| 2020 | Q3 | 200 |
| 2020 | Q4 | 250 |
如果希望按年份显示每季度销售额,则可以编写如下查询语句来完成这一需求:
```sql
SELECT Year,
[Q1], [Q2], [Q3], [Q4]
FROM (
SELECT Year, Quarter, Sales
FROM Sales
) AS SourceData
PIVOT (
SUM(Sales)
FOR Quarter IN ([Q1], [Q2], [Q3], [Q4])
) AS PivotTable;
```
上述代码会返回这样的结果集[^3]:
| Year | Q1 | Q2 | Q3 | Q4 |
|------|-----|-----|-----|-----|
| 2020 | 100 | 150 | 200 | 250 |
#### Oracle 数据库中的特殊说明
对于Oracle数据库而言,在实际应用过程中需要注意其特定版本的支持情况以及某些细节上的差异。例如,在较新的版本中可以直接利用内置的 `PIVOT` 子句简化复杂度较高的嵌套查询逻辑;而在早期版本里可能还需要依赖手动方式构建类似的行列互换效果[^2]。
#### 注意事项
当定义多个透视字段或者处理大型数据集合时需谨慎考虑性能影响因素,并合理设置索引优化执行计划。另外还需注意源数据集中是否存在重复项等问题以免造成统计错误。
---
阅读全文
相关推荐


















