1、行转列(PIVOT函数、CASE WHEN和GROUP BY、MAX和DECODE)
CREATE TABLE employees (
employee_id NUMBER,
department_name VARCHAR2(10),
salary NUMBER
);
INSERT INTO employees VALUES (1, 'IT', 5000);
INSERT INTO employees VALUES (2, 'HR', 4000);
INSERT INTO employees VALUES (3, 'Sales', 6000);
COMMIT;
SELECT * FROM employees;
---1、PIVOT
SELECT *
FROM (
SELECT employee_id, department_name, salary
FROM employees
)
PIVOT (
SUM(salary)
FOR department_name IN ('IT', 'HR', 'Sales')
);
---2、CASE WHEN和GROUP BY (取的总和)
SELECT employee_id,
SUM(CASE WHEN department_name = 'IT' THEN salary END) AS "IT",
SUM(CASE WHEN department_name = 'HR' THEN salary END) AS "HR",
SUM(CASE WHEN department_name = 'Sales' THEN salary END) AS "Sales"
FROM employees
GROUP BY employee_id;
---3、MAX和DECODE (取的最大一条)
SELECT employee_id,
MAX(DECODE(department_name, 'IT', salary)) AS "IT",
MAX(DECODE(department_name, 'HR', salary)) AS "HR",
MAX(DECODE(department_name, 'Sales', salary)) AS "Sales"
FROM employees
GROUP BY employee_id;
2、列转行(UNPIVOT函数、UNION ALL)
CREATE TABLE sales (
region VARCHAR2(100),
product VARCHAR2(100),
sales_amount NUMBER
);
insert into sales (PRODUCT, YEAR2018, YEAR2019, YEAR2020, ATTR)
values ('A', '100', '200', '300', 'ZZ');
insert into sales (PRODUCT, YEAR2018, YEAR2019, YEAR2020, ATTR)
values ('B', '500', '600', '700', 'YY');
commit;
SELECT * FROM sales for update;
---1、UNPIVOT
SELECT product,amount,YEAR
FROM sales
UNPIVOT (amount FOR YEAR IN ("YEAR2018", "YEAR2019", "YEAR2020"));
---2、UNION ALL
SELECT product, 'YEAR2018' AS year, "YEAR2018" AS amount FROM sales
UNION ALL
SELECT product, 'YEAR2019' AS year, "YEAR2019" AS amount FROM sales
UNION ALL
SELECT product, 'YEAR2020' AS year, "YEAR2020" AS amount FROM sales;