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

如何在单条JOIN查询中同时实现CheckID去重与Earnings求和?

解决方案

你可以通过GROUP BY子句实现按c.CheckID去重,并结合SUM()聚合函数计算Earnings的总和。同时需要修正原查询中判断NULL的错误写法(SQL中判断非空需用IS NOT NULL,而非!= NULL)。

修改后的查询语句

SELECT 
    c.CheckID,
    SUM(cv.Earnings) AS TotalEarnings,
    c.EmployeeCode,
    c.CheckDate,
    -- 若TaxableEarnings、Amount在同一CheckID下有多个值,需用聚合函数(如MAX/AVG);若唯一则直接保留
    MAX(cv.TaxableEarnings) AS TaxableEarnings,
    MAX(c.Amount) AS Amount
FROM [Customers0].[pay].[CheckVendorCalc] AS cv
INNER JOIN [Customers0].[pay].[Checks] AS c
    ON cv.CheckID = c.CheckID
WHERE
    c.CheckDate BETWEEN '2022-01-01' AND '2022-12-31'
    AND c.CustomerID = 360
    AND c.EmployeeCode = '01'
    AND (cv.TaxableEarnings IS NOT NULL OR cv.TaxableEarnings != 0)
GROUP BY 
    c.CheckID,
    c.EmployeeCode,
    c.CheckDate

关键说明

  • 去重逻辑:GROUP BY c.CheckID会将相同CheckID的记录合并为一行,实现去重。查询中所有非聚合字段(如EmployeeCode、CheckDate)必须加入GROUP BY,确保这些字段在同一CheckID下是唯一值。
  • 求和逻辑:SUM(cv.Earnings)会计算每个CheckID对应的Earnings总和,AS TotalEarnings用于给结果列命名,方便识别。
  • NULL判断修正:SQL中不能用!= NULL判断非空,必须使用IS NOT NULL,否则会导致逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:01:03