如何使用Oracle SQL Pivot将多行数据按列转换为单行
Oracle SQL行转列并求和实现方案
针对需求,要将子查询得到的TABLE_1转换为员工单行、薪资项列展示且求和的格式,这里提供两种实用方法:
方法一:CASE WHEN + 聚合函数(兼容所有Oracle版本)
这种方法兼容性强,适合所有Oracle版本,核心思路是按员工和部门分组,对每个薪资项用CASE判断后求和,无数据则返回0:
SELECT EMPLOYEE, SUM(CASE WHEN ELEMENT = 'Basic' THEN VALUE ELSE 0 END) AS Basic, SUM(CASE WHEN ELEMENT = 'Rent' THEN VALUE ELSE 0 END) AS Rent, SUM(CASE WHEN ELEMENT = 'Pension' THEN VALUE ELSE 0 END) AS Pension, DEPT FROM ( -- 这里替换成你的子查询,即原TABLE_1的来源 SELECT EMPLOYEE, ELEMENT, VALUE, DEPT FROM TABLE_1 ) t GROUP BY EMPLOYEE, DEPT ORDER BY EMPLOYEE;
方法二:PIVOT函数(Oracle 11g及以上版本)
Oracle 11g开始支持PIVOT语法,写法更简洁,需要用NVL把空值转为0:
SELECT EMPLOYEE, NVL(Basic, 0) AS Basic, NVL(Rent, 0) AS Rent, NVL(Pension, 0) AS Pension, DEPT FROM ( -- 替换为你的子查询 SELECT EMPLOYEE, ELEMENT, VALUE, DEPT FROM TABLE_1 ) t PIVOT ( SUM(VALUE) FOR ELEMENT IN ('Basic' AS Basic, 'Rent' AS Rent, 'Pension' AS Pension) ) p ORDER BY EMPLOYEE;
两种方法都能输出目标格式:每个员工一行记录,对应薪资项为该元素的总和,无数据则显示0。
内容的提问来源于stack exchange,提问作者daibatzu
相关产品推荐
相关产品推荐

