【Oracle】Oracle中的行转列、列转行(unpivot、pivot函数)
在Oracle数据库中,行转列通常使用UNPIVOT
操作,列转行使用PIVOT
操作。
以下是使用UNPIVOT
的示例代码:
-- 假设有一个名为sales的表,包含year, product_type和sales_amount三个字段
CREATE TABLE sales (year INT, product_type VARCHAR2(50), sales_amount INT);
-- 插入一些示例数据
INSERT INTO sales VALUES (2020, 'Type1', 100);
INSERT INTO sales VALUES (2020, 'Type2', 150);
INSERT INTO sales VALUES (2021, 'Type1', 200);
INSERT INTO sales VALUES (2021, 'Type2', 250);
COMMIT;
-- 使用UNPIVOT将行转换为列
SELECT * FROM
(
SELECT year, product_type, sales_amount
FROM sales
)
PIVOT
(
SUM(sales_amount)
FOR product_type IN ('Type1' AS type1_sales, 'Type2' AS type2_sales)
);
以下是使用PIVOT
的示例代码:
-- 假设有一个名为employee的表,包含department_id和employee_name两个字段,以及一个代表职位的字段position
CREATE TABLE employee (department_id INT, employee_name VARCHAR2(50), position VARCHAR2(50));
-- 插入一些示例数据
INSERT INTO employee VALUES (1, 'Employee1', 'Manager');
INSERT INTO employee VALUES (1, 'Employee2', 'Engineer');
INSERT INTO employee VALUES (2, 'Employee3', 'Manager');
INSERT INTO employee VALUES (2, 'Employee4', 'Engineer');
COMMIT;
-- 使用PIVOT将列转换为行
SELECT * FROM
(
SELECT department_id, employee_name, position
FROM employee
)
PIVOT
(
COUNT(employee_name)
FOR position IN ('Manager' AS managers, 'Engineer' AS engineers)
);
请注意,在实际使用中,你需要根据你的数据表结构和需求调整上述代码示例。
评论已关闭