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

Teradata中按Agreement_ID重复行数分摊财务事件金额的问询

解决方案

你的原SQL问题在于使用了GROUP BY,这会将相同AGREEMENT_ID、PARTY_ID和FINANCIAL_EVENT_AMOUNT的行聚合为一行,而你需要保留所有重复记录,仅对每条记录的金额进行分摊计算。

正确的做法是使用窗口函数,通过COUNT(*) OVER(PARTITION BY AGREEMENT_ID)统计每个AGREEMENT_ID对应的重复行数,再用原金额除以这个次数得到分摊后的金额:

SELECT 
    AGREEMENT_ID,
    PARTY_ID,
    FINANCIAL_EVENT_AMOUNT / COUNT(*) OVER(PARTITION BY AGREEMENT_ID) AS ALLOCATED_AMOUNT
FROM DB.TABLENAME;

说明:

  • COUNT(*) OVER(PARTITION BY AGREEMENT_ID):为每条记录计算其所属AGREEMENT_ID分组内的总行数,也就是该ID的重复次数。
  • 执行后每条原始记录都会被保留,金额按重复次数平均分摊,总金额与原金额完全一致。

如果同一个AGREEMENT_ID下的PARTY_ID可能存在差异,但你仍希望按AGREEMENT_ID统一分摊金额,上述语句直接适用;若需要按AGREEMENT_ID + PARTY_ID的组合统计重复次数,只需将分区条件改为PARTITION BY AGREEMENT_ID, PARTY_ID即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:50:24