【Oracle】Oracle行转列、列转行的几种方法
在Oracle数据库中,行转列通常可以通过使用CASE
语句或PIVOT
操作来实现。列转行可以通过UNPIVOT
操作来实现。
以下是一些基本的示例:
行转列(使用CASE语句)
假设有一个sales
表,结构如下:
year | product | amount
-----|---------|-------
2020 | A | 100
2020 | B | 150
2021 | A | 200
2021 | B | 240
要将此表转换为每个产品一行,并在列中显示每个年份的销售额,可以使用以下SQL查询:
SELECT product,
SUM(CASE WHEN year = 2020 THEN amount ELSE 0 END) AS sales_2020,
SUM(CASE WHEN year = 2021 THEN amount ELSE 0 END) AS sales_2021
FROM sales
GROUP BY product;
行转列(使用PIVOT)
使用PIVOT
的例子与上面相同,但语法稍有不同:
SELECT * FROM
(
SELECT year, product, amount
FROM sales
)
PIVOT
(
SUM(amount)
FOR year IN (2020, 2021)
);
列转行(使用UNPIVOT)
如果上述行转列的例子中产生了以下结果:
product | sales_2020 | sales_2021
--------|------------|-----------
A | 100 | 200
B | 150 | 240
要将此结果转换回原始的行格式,可以使用UNPIVOT
:
SELECT product, year, amount
FROM
(
SELECT product, sales_2020, sales_2021
FROM your_table
)
UNPIVOT
(
amount FOR year IN (sales_2020 AS 2020, sales_2021 AS 2021)
);
这些是Oracle中行转列和列转行操作的基本方法。
评论已关闭