Oracle中的行列转换
在Oracle中,行列转换通常可以通过使用CASE
语句或PIVOT
操作来实现。以下是一个使用PIVOT
操作的例子:
假设我们有一个名为sales_data
的表,其结构如下:
CREATE TABLE sales_data (
year NUMBER,
product VARCHAR2(50),
sales_person VARCHAR2(50),
amount NUMBER
);
我们可以插入一些示例数据:
INSERT INTO sales_data (year, product, sales_person, amount) VALUES (2021, 'ProductA', 'SalesPerson1', 100);
INSERT INTO sales_data (year, product, sales_person, amount) VALUES (2021, 'ProductA', 'SalesPerson2', 150);
INSERT INTO sales_data (year, product, sales_person, amount) VALUES (2021, 'ProductB', 'SalesPerson1', 200);
INSERT INTO sales_data (year, product, sales_person, amount) VALUES (2021, 'ProductB', 'SalesPerson2', 250);
要将sales_person
的销售额由行转换为列,我们可以使用以下查询:
SELECT year, product,
SUM(CASE WHEN sales_person = 'SalesPerson1' THEN amount ELSE 0 END) AS SalesPerson1,
SUM(CASE WHEN sales_person = 'SalesPerson2' THEN amount ELSE 0 END) AS SalesPerson2
FROM sales_data
GROUP BY year, product;
如果您的Oracle数据库版本支持PIVOT
,则可以使用以下查询:
SELECT * FROM (
SELECT year, product, sales_person, amount
FROM sales_data
)
PIVOT (
SUM(amount)
FOR sales_person IN ('SalesPerson1' AS SalesPerson1, 'SalesPerson2' AS SalesPerson2)
);
这将输出一个结果集,其中SalesPerson1
和SalesPerson2
的销售额被转换成了行中的列。
评论已关闭