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

如何按条件计算字段总和?双表关联下未付发票余额查询问题

嘿,这两个SQL需求我很熟悉,给你拆解一下解决方案:

问题1:生成新发票时计算客户此前未付发票总和

当你要生成新发票时,核心是针对当前客户,筛选出所有在新发票创建日期之前、且状态为未付的旧发票,然后求和剩余金额。这里要注意几个关键点:

  • 要排除新发票本身(用InvoiceDate < 新发票日期)
  • 未付状态的判断要和你表中PaidOrNot的实际值匹配(比如是'No'、0还是其他枚举)
  • 处理没有未付发票的情况,避免返回NULL,用COALESCE转成0更合理

示例代码:

-- 先定义当前客户ID和新发票的创建日期(实际场景中可以从插入参数里取)
DECLARE @TargetCustomerId INT = 456;
DECLARE @NewInvoiceCreateDate DATE = GETDATE();

SELECT 
    COALESCE(SUM(RemainingAmout), 0) AS TotalUnpaidBeforeNewInvoice
FROM tbl_Invoices
WHERE 
    CustomerId = @TargetCustomerId
    AND PaidOrNot = 'No' -- 替换成你实际的未付标识,比如0(bit类型)
    AND InvoiceDate < @NewInvoiceCreateDate;

如果是在插入新发票的存储过程里,你可以直接把这个查询的结果作为变量,插入到需要的地方,或者用于业务校验。

问题2:按InvoiceDate筛选时获取客户的RemainingAmount

这个需求分两种常见场景,我都给你列出来:

场景A:统计指定日期范围内的发票数量,同时获取每个客户在该范围内的剩余金额总和

如果你要统计某段时间的发票数量,同时想知道每个客户在这段时间里的发票总共还剩多少钱,用分组聚合就可以:

-- 替换成你需要的日期范围
DECLARE @StartDate DATE = '2024-01-01';
DECLARE @EndDate DATE = '2024-06-30';

SELECT 
    c.CustomerId,
    c.CustomerName, -- 如果tbl_Customers有客户名字字段,加上更直观
    COUNT(i.InvoiceId) AS InvoiceCountInRange,
    COALESCE(SUM(i.RemainingAmout), 0) AS TotalRemainingInRange
FROM tbl_Customers c
LEFT JOIN tbl_Invoices i 
    ON c.CustomerId = i.CustomerId
    AND i.InvoiceDate BETWEEN @StartDate AND @EndDate
GROUP BY c.CustomerId, c.CustomerName;

用LEFT JOIN是为了让那些在该日期范围内没有发票的客户也能显示出来(发票数量0,剩余金额0),如果只需要有发票的客户,换成INNER JOIN就行。

场景B:获取每个客户在指定日期范围内的最新发票的RemainingAmount

如果你的“新打印发票”指的是每个客户在筛选日期内的最新发票,那用窗口函数ROW_NUMBER()来定位最新记录:

DECLARE @FilterDate DATE = '2024-06-30'; -- 比如筛选所有在这个日期之前创建的发票

SELECT 
    CustomerId,
    InvoiceId,
    InvoiceDate,
    RemainingAmout
FROM (
    SELECT 
        CustomerId,
        InvoiceId,
        InvoiceDate,
        RemainingAmout,
        -- 按客户分组,按发票日期降序排,最新的排第1
        ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY InvoiceDate DESC) AS rn
    FROM tbl_Invoices
    WHERE InvoiceDate <= @FilterDate
) t
WHERE rn = 1;

这个查询会返回每个客户符合日期条件的最新发票的剩余金额,非常适合打印客户的最新账单场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:22:17