如何实现仅当Ledger Amount为正时按Partition By求和Applied Amount
需求与解决方案:仅对符合条件的Applied Amount求和
需求
仅当Table B中的Ledger Amount为正数时,对Table C中的Applied Amount按Table A的Statement #分区求和。
示例表结构与数据
Table A
Statement # ID 500 1 500 2 500 3 500 4
Table B
Ledger_Amount Type ID -389.41 Credit 1 -1218.9 Credit 2 -243.63 Credit 3 3485.19 Invoice 4
Table C
Applied_Amount ID 389.41 1 1218.9 2 243.63 3 1633.25 4
当前问题
当前使用的代码:
(sum(applied_amount) over (partition by statement_number),0)
仅按Statement #分区求和所有关联的Applied Amount,导致计算结果为3485.19美元,但实际需求是排除Table B中Ledger Amount小于0的ID(1、2、3),仅对ID4的Applied Amount求和,期望结果为1633.25美元。
修正后的代码
通过条件判断实现精准求和,示例代码如下:
sum(CASE WHEN b.Ledger_Amount > 0 THEN c.Applied_Amount ELSE 0 END) OVER (PARTITION BY a.`Statement #`)
说明
- 关联Table A、Table B和Table C,确保ID一一对应
- 用
CASE WHEN筛选出Table B中Ledger_Amount为正数的记录,仅将对应Table C的Applied_Amount计入求和 - 按Table A的Statement #分区,最终得到符合条件的金额总和
内容的提问来源于stack exchange,提问作者user20736472
相关产品推荐
相关产品推荐

