Oracle11g 按查询展开分组中的分组行

Oracle11g 按查询展开分组中的分组行,oracle11g,oracle-sqldeveloper,Oracle11g,Oracle Sqldeveloper,我很好奇,在Oracle SQL Developer中是否有一种方法可以通过查询扩展组中包含的行,无论是在报表中还是在数据网格中。例如,假设我有一个支付金额的单笔支付交易。我对这些字段进行了分组,得到了项目的总和,即总付款金额。如果我有一个功能,允许我查看交易中构成总支付金额的项目,而不必删除Group By字段和AGGRATE SUM函数,那将非常好 以下面的数据为例说明我在寻找什么。以下示例数据中只有两个表。pymt_交易和交易_项目 上面的结果生成下面的结果集 现在,按版本分组。在上述示

我很好奇,在Oracle SQL Developer中是否有一种方法可以通过查询扩展组中包含的行,无论是在报表中还是在数据网格中。例如,假设我有一个支付金额的单笔支付交易。我对这些字段进行了分组,得到了项目的总和,即总付款金额。如果我有一个功能,允许我查看交易中构成总支付金额的项目,而不必删除Group By字段和AGGRATE SUM函数,那将非常好

以下面的数据为例说明我在寻找什么。以下示例数据中只有两个表。pymt_交易和交易_项目

上面的结果生成下面的结果集

现在,按版本分组。在上述示例中使用相同的两个CTE:

SELECT pt.tran_id, COUNT(ti.retail_item) AS num_retail_items, 
NVL(SUM(ti.amt),0) AS payment_amount
FROM pymt_transactions pt
  LEFT JOIN transaction_items ti ON ti.tran_id = pt.tran_id
GROUP BY pt.tran_id
ORDER BY pt.tran_id
;
上述按查询分组生成以下结果和按传输id分组:

同样,不必编写两个不同的查询,有没有一种方法可以简单地按查询分组,并提供只需单击展开即可查看零售商品的功能?我使用过具有此功能的报表和其他系统。交易1和交易2中都有四种零售商品。我想查看这些项目,而不必删除Group By子句和在“付款金额”列中生成总额的AGGRATE SUM函数。

尝试生成报告

查看>报告

用户定义的报告

添加新报告

提供主SQL,然后添加一个子报表,并使用:BIND将数据绑定在一起

然后单击顶部的一行,获取下面所需的详细数据。


如果你愿意,你也可以开始玩图表了

一次访问所有值,也许这是一个解决方案

SELECT pt.tran_id
, ti.retail_item
, ti.amt
,COUNT(ti.retail_item) over (Partition by pt.tran_id)
,SUM(ti.amt)  over (Partition by pt.tran_id)
FROM pymt_transactions pt
  LEFT JOIN transaction_items ti ON ti.tran_id = pt.tran_id
ORDER BY pt.tran_id
;

好的,让我们试着构建一个深入的报告。 首先构建一个用户定义的报告,通过添加一个过滤器计算总和(我认为大写字母在这里很重要)

然后使用初始sql添加另一个报告。

并添加对sumcnt报告的引用

现在运行top报告并右键单击它,您将获得以下结果:


祝你好运

SQLDev中的报告功能,你可以有一个报告,上面显示汇总,下面显示详细信息,但是在sqldeveloper工作表或网格中,一般来说,没有任何东西可以为你提供这一功能。我刚刚创建了一个报告。从未使用过此功能。添加了由项目组成的子报表。这不像简单地点击加号图标并展开所选记录下的多个项目那么酷,但它确实满足了我的需要。虽然这是可能的,但这个答案仍然会给你留下同样的问题——可读性。例如,对于特定的日期范围,我有851笔单独的交易。我想看看这些单独的交易,这样我才能理解它。如果我在同一个查询中包含这851个事务中的所有项,那么我现在有一个非常大的数据集。这现在变得很难检查或理解。每个事务3项=2553行,以便直观地查看。我现在非常熟悉SQL Developer中的报表功能。我读过你们的一些博客,我肯定是使用SQLDeveloper八年的人之一,我从未使用过Reports功能。虽然报告功能有一些笨拙的方面,但它为我提供了我所需要的。
SELECT pt.tran_id
, ti.retail_item
, ti.amt
,COUNT(ti.retail_item) over (Partition by pt.tran_id)
,SUM(ti.amt)  over (Partition by pt.tran_id)
FROM pymt_transactions pt
  LEFT JOIN transaction_items ti ON ti.tran_id = pt.tran_id
ORDER BY pt.tran_id
;