You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:52:03