将查询分组为 3 列,并在 Apex Oracle 中显示另一列的总和

Posted

技术标签:

【中文标题】将查询分组为 3 列,并在 Apex Oracle 中显示另一列的总和【英文标题】:Group the query into 3 columns, and display the sums for another column in Apex Oracle 【发布时间】:2020-06-02 07:17:59 【问题描述】:

我想报告。在我的要求中,这并不难。我在此请求中指定日期和记录类型(正数或负数)。我希望此查询按字段 CONTRACTORID、ITEMID ORGANIZATION 分组。并在 NETTO 上提取金额。

select
  ID, DOCNUMBER,DOCDATE,PRINTNUMBER,DRIVERID,CONTRACTORID,ITEMID,
  BRUTTO,TARE,NETTO,
  DS_ID,
  DAT_A,
  MILEAGE,
  ORGANIZATION,
  sum(NETTO)
from WAYBILL
where trunc(DOCDATE) between to_date(:P115_D1,'dd.mm.yyyy')
                         and to_date(:P115_D2,'dd.mm.yyyy')
and DIRECTIONID = :P115_DIRECTIONID 
group by 
  ID, DOCNUMBER,DOCDATE,PRINTNUMBER,DRIVERID,CONTRACTORID,ITEMID,
  BRUTTO,TARE,NETTO,
  DS_ID,
  DAT_A,
  MILEAGE,
  ORGANIZATION

【问题讨论】:

如果您想按contractorid、itemid 和organization 分组,那么为什么要选择所有其他列?只需将它们从 select 子句和 group by 子句中删除即可,我会说。 提供您的预期结果 @ThorstenKettner 我也想查看报告中的其他列,但仅按分组列计算净额。有可能吗? 【参考方案1】:

似乎您想要显示完整的行,每行都有每个其contractorid、itemid 和组织的净总和。您可以使用窗口函数来实现这一点:

select
  id,  docnumber, docdate, printnumber, driverid, contractorid, itemid, 
  brutto, tare, netto, ds_id, dat_a, mileage, organization,
  sum(netto) over (partition by contractorid, itemid, organization) as netto_sum
from waybill
where trunc(docdate) between to_date(:p115_d1,'dd.mm.yyyy')
                         and to_date(:p115_d2,'dd.mm.yyyy')
and directionid = :p115_directionid 
order by id;

【讨论】:

谢谢。但也许你并不完全了解我。所以我想显示整条线,但它们中的每一条都没有每个承包商的总金额。只是值,我想在此报告中显示的金额(在净列中)。例如,我有一些组织有文件的记录。我想在这个报告中提取这个组织的金额,如果还收敛两个字段contractorid,itemid。 也许他没有完全理解你,因为你没有提供预期的输出。 是的,也许我没有完全理解。看来我不是唯一一个 :-) 所以,请遵循 Jim Macaulay 在请求 cmets 中的建议并编辑您的请求以显示一些示例数据和预期结果。

以上是关于将查询分组为 3 列,并在 Apex Oracle 中显示另一列的总和的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Oracle Apex 中的无效列错误?

Oracle Apex:如何执行程序并在页面上显示结果

Oracle APEX 文本页面项作为 SQL 查询中的不可编辑超链接字段

Oracle APEX 自动在区域中添加/删除列

Oracle Apex - 逗号分隔的 LOV

oracle查询表中某一列所有不同分组的某个一列的最大值,并且返回这一行所有列的值。