SQL基于包含要聚合的关键字段的条件聚合数据

ruyhziif  于 2022-10-04  发布在  Oracle
关注(0)|答案(1)|浏览(154)

我对SQL(Oracle SQL,如果它有作用的话)是新手,但碰巧我不得不使用它。我需要按一些关键字段(CustID、AppID)聚合数据。我还有一些AppDate、PDate和Amount t.Initial data我需要做的是聚合,但对于每个键字段组合,我需要在以下条件下聚合来自其他行的数据:

  • CustID=CustID,也就是只接受此客户ID的信息
  • appid!=appid aka只接受与当前应用程序不同的信息。
  • AppDate>=PDate也就是只获取申请时可用的信息

通过对SQL语言的快速了解,我的方法是使用:

select CustId, AppId, Sum(case when 
custid=custid and Appid!=Appid and AppDate >= PDate then Amount else 0 end) as SumAmount
From Table 
Group by CustId AppId

不幸的是,我得到的SumAmount结果都是0。我猜这是因为最后两个条件。我希望从示例表中获得的结果是:Results此外,我可能会添加条件,即AppDate-AppDate的其他AppID>6个月的AppDate将那些从聚合金额中排除。

另外,我真的很抱歉格式不达标,可能还有错误的代码。我对如何做这件事并不是很有经验。

编辑:我找到了如下解决方案:

select distinct a.CustId, a.AppId, a.AppDate, b.PDate, b.Amount
from table a
inner join (select CustId, AppId, Amount, PDate from Table) b
on a.CustId = b.CustId and a.AppId != b.AppId
where a.AppDate >= b.PDate

在此之后,我通过AppID将金额相加来进行汇总。基本上,我只是根据条件追加相同的信息,因为我得到了许多完全重复的副本,所以我使用DISTINCT进行重复数据消除。

bogh5gae

bogh5gae1#

我找到了如下解决方案:

select distinct a.CustId, a.AppId, a.AppDate, b.PDate, b.Amount
from table a
inner join (select CustId, AppId, Amount, PDate from Table) b
on a.CustId = b.CustId and a.AppId != b.AppId
where a.AppDate >= b.PDate

在此之后,我通过AppID将金额相加来进行汇总。基本上,我只是根据条件追加相同的信息,因为我得到了许多完全重复的副本,所以我使用DISTINCT进行重复数据消除。

相关问题