📅  最后修改于: 2023-12-03 15:18:09.182000             🧑  作者: Mango
Oracle 列表函数是指一类能够产生行列表的 SQL 函数,包括 unpivot 和 pivot 等。这些函数用于在 SQL 查询中更灵活地操作数据。本文将介绍 Oracle 列表函数的基本知识和使用方法。
unpivot 函数可以将一列值转换成多行。其语法如下:
SELECT *
FROM
table_name
UNPIVOT
(
<new_column_name> FOR <old_column_name> IN (<column_list>)
)
其中,table_name
是需要操作的表名,new_column_name
是新的列名,old_column_name
是需要操作的列名,column_list
是需要进行 unpivot 操作的列列表。
例如,假设我们要将以下表格:
Name | Qtr1 | Qtr2 | Qtr3 | Qtr4
-----|------|------|------|-----
John | 100 | 200 | 300 | 400
Jane | 200 | 300 | 400 | 500
Mike | 300 | 400 | 500 | 600
转换成以下表格:
Name | Quarter | Total
-----|---------|------
John | Qtr1 | 100
John | Qtr2 | 200
John | Qtr3 | 300
John | Qtr4 | 400
Jane | Qtr1 | 200
Jane | Qtr2 | 300
Jane | Qtr3 | 400
Jane | Qtr4 | 500
Mike | Qtr1 | 300
Mike | Qtr2 | 400
Mike | Qtr3 | 500
Mike | Qtr4 | 600
可以使用以下 SQL 语句:
SELECT Name, Quarter, Total
FROM
quarterly_sales
UNPIVOT
(
Total FOR Quarter IN (Qtr1, Qtr2, Qtr3, Qtr4)
)
pivot 函数可以将行转换成列。其语法如下:
SELECT *
FROM
(
SELECT <row_column>, <pivot_column>, <value_column>
FROM <table_name>
)
PIVOT
(
<aggregate_function>(<value_column>)
FOR <pivot_column> IN (<pivot_value_list>)
)
其中,table_name
是需要操作的表名,row_column
是需要保留的行信息,pivot_column
是需要转换成列的列名,value_column
是需要操作的值的列名,aggregate_function
是聚合函数名称(例如 SUM
、AVG
等),pivot_value_list
是需要作为列的值的列表。
例如,假设我们要将以下表格:
Quarter | John | Jane | Mike
--------|------|------|-----
Qtr1 | 100 | 200 | 300
Qtr2 | 200 | 300 | 400
Qtr3 | 300 | 400 | 500
Qtr4 | 400 | 500 | 600
转换成以下表格:
Quarter | John | Jane | Mike
--------|------|------|-----
Qtr1 | 100 | 200 | 300
Qtr2 | 200 | 300 | 400
Qtr3 | 300 | 400 | 500
Qtr4 | 400 | 500 | 600
Total | 1000 | 1400 | 1800
可以使用以下 SQL 语句:
SELECT *
FROM
(
SELECT Quarter, Name, Total
FROM quarterly_sales
)
PIVOT
(
SUM(Total)
FOR Name IN ('John', 'Jane', 'Mike')
)
本文介绍了 Oracle 列表函数 unpivot 和 pivot 的基本知识和使用方法。这些函数可以帮助程序员更灵活地操作 SQL 查询中的数据。