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

Oracle Fusion Middleware下SQL费用分类聚合问题求助

解决Oracle中Fringe/Other Direct Expenses多行合并为单行的问题

首先,Oracle没有内置的REPORT_AGGREGATE函数,你大概率用错了工具。针对多行转单行的需求,分两种场景给你实际解决方案:

场景1:合并同类型费用的数值(比如求和)

如果要把同一类费用的多行金额合并成单行总和,直接用SUM()配合GROUP BY分组即可:

SELECT 
    项目ID, 报表ID, -- 替换为你的实际分组字段
    expense_type,
    SUM(expense_amount) AS total_expense
FROM 
    你的费用表名
WHERE 
    expense_type IN ('Fringe', 'Other Direct Expenses')
GROUP BY 
    项目ID, 报表ID, expense_type;

场景2:合并同类型费用的文本内容(比如备注、明细)

如果要把多行的文本内容拼接成单行,用Oracle标准的LISTAGG()函数:

SELECT 
    项目ID, 报表ID, -- 替换为你的实际分组字段
    expense_type,
    LISTAGG(expense_detail, '; ') WITHIN GROUP (ORDER BY expense_date) AS merged_details
FROM 
    你的费用表名
WHERE 
    expense_type IN ('Fringe', 'Other Direct Expenses')
GROUP BY 
    项目ID, 报表ID, expense_type;

兼容性替代方案(适用于Oracle 11g及更早版本)

如果你的Oracle版本不支持LISTAGG,可以用XMLAGG实现:

SELECT 
    项目ID, 报表ID, -- 替换为你的实际分组字段
    expense_type,
    RTRIM(XMLAGG(XMLELEMENT(E, expense_detail || '; ') ORDER BY expense_date).EXTRACT('//text()'), '; ') AS merged_details
FROM 
    你的费用表名
WHERE 
    expense_type IN ('Fringe', 'Other Direct Expenses')
GROUP BY 
    项目ID, 报表ID, expense_type;

你之前用REPORT_AGGREGATE失败,大概率是这个函数不是Oracle标准函数——要么是你们系统自定义的,要么是你记错了函数名。先试试上面的标准方法,如果还是有问题,把你当前的SQL代码、表结构字段和期望的输出格式贴出来,能更快定位问题。

内容的提问来源于stack exchange,提问作者ScoobyDoo425

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:15:57