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

如何修改SQL查询移除应收款已结清的客户参考行

客户采购记录查询优化方案

原始客户采购活动表格

DateOfActivityCustomerReferenceReference LineDescriptionReceivable Amount
24/10/2022CUST5671Credit Purchase20,000
24/10/2022CUST5674Credit Purchase10,000
24/10/2022CUST5552Credit Purchase50,000
27/10/2022CUST5552Contract Sign0
27/10/2022CUST5674Contract Sign0
27/10/2022CUST5671Contract Sign0
27/10/2022CUST5674Repayment-3,500
27/10/2022CUST5674Repayment-6,500
13/11/2022CUST5671Repayment-10,000
13/11/2022CUST5671Repayment-2,000
18/11/2022CUST5671Contract Sign0
18/11/2022CUST5671Repayment-3,000

原始查询语句

Select DateOfActivity, CustomerReferencce, ReferenceLine, Description, ReceivableAmount
From 'Table A'
Where DateOfActivity >= '2022-09-01'
Group by DateOfActivity

预期查询结果

DateOfActivityCustomerReferenceReference LineDescriptionReceivable Amount
24/10/2022CUST5671Credit Purchase20,000
24/10/2022CUST5552Credit Purchase50,000
27/10/2022CUST5552Contract Sign0
27/10/2022CUST5671Contract Sign0
13/11/2022CUST5671Repayment-10,000
13/11/2022CUST5671Repayment-2,000
18/11/2022CUST5671Contract Sign0
18/11/2022CUST5671Repayment-3,000

说明:CUST567 Reference Line 4的所有记录已被移除,因为该组合下应收款总和为0,其他客户记录均保留。

修改后的查询语句(适配大数据场景)

WITH CustomerBalances AS (
    SELECT 
        CustomerReference, 
        ReferenceLine,
        SUM(CAST(REPLACE(ReceivableAmount, ',', '') AS DECIMAL(18,2))) AS TotalReceivable
    FROM 'Table A'
    WHERE DateOfActivity >= '2022-09-01'
    GROUP BY CustomerReference, ReferenceLine
)
SELECT 
    t.DateOfActivity, 
    t.CustomerReference, 
    t.ReferenceLine, 
    t.Description, 
    t.ReceivableAmount
FROM 'Table A' t
JOIN CustomerBalances cb 
    ON t.CustomerReference = cb.CustomerReference 
    AND t.ReferenceLine = cb.ReferenceLine
WHERE 
    t.DateOfActivity >= '2022-09-01'
    AND cb.TotalReceivable != 0
ORDER BY t.DateOfActivity, t.CustomerReference, t.ReferenceLine;

核心逻辑说明

  1. 预计算余额:通过CTECustomerBalances一次性计算每个CustomerReference+ReferenceLine组合的应收款总和,处理金额字段中的逗号并转换为数值类型,确保求和准确。
  2. 过滤结清记录:将原始表与预计算的余额表关联,直接过滤掉总和为0的客户+行号组合,避免重复计算。
  3. 大数据适配:分组计算仅执行一次,联合索引(建议在CustomerReference和ReferenceLine上创建)可大幅提升JOIN操作效率,适配数据持续增长的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:20:27