0
点赞
收藏
分享

微信扫一扫

oracle行转列和列转行

英乐 2023-12-07 阅读 40

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;

oracle行转列和列转行_列转行

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;

oracle行转列和列转行_行转列_02



举报

相关推荐

0 条评论