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

如何在SQL查询中仅按GROUP BY的两个指定字段执行SUM聚合?

调整SQL分组聚合的两种方案

要实现仅按月份起始日和W2CliendId两个维度聚合Value,核心是修改GROUP BY子句,同时处理好原查询中依赖TypeId的Type列(因为不再按TypeId分组,这部分需要根据你的需求调整)。以下是两种适配不同场景的方案:

方案1:仅汇总总数值,无需区分类型

如果不需要保留Type相关的分类信息,直接移除所有和TypeId绑定的逻辑即可:

SELECT 
    W2CliendId, 
    CAST(DATEADD(month, DATEDIFF(month, 0, Date), 0) AS date) AS MonthStarts,
    SUM(Value) AS [TotalValue]  -- 重命名字段更清晰地表示是总数值
FROM CompanyTypeValues CTV 
JOIN CompanyProfile CP ON CP.CompanyId = CTV.CompanyId 
WHERE CP.Status = 0 AND Date >= '2015-08-11' 
GROUP BY 
    CAST(DATEADD(month, DATEDIFF(month, 0, Date), 0) AS date), 
    W2CliendId 
ORDER BY 
    MonthStarts, 
    W2CliendId

说明:删除了原查询中CASE WHEN生成的Type列,以及GROUP BY里的TypeId,直接按月份和W2CliendId汇总所有类型的Value总和。

方案2:保留类型信息,合并展示

如果需要在同一分组下看到包含的所有类型,可以用字符串聚合函数(以SQL Server的STRING_AGG为例)将类型合并:

SELECT 
    W2CliendId, 
    CAST(DATEADD(month, DATEDIFF(month, 0, Date), 0) AS date) AS MonthStarts,
    STRING_AGG(
        CASE 
            WHEN TypeId = 1 THEN '4 Search views' 
            WHEN TypeId = 2 THEN '5 Maps views' 
            WHEN TypeId = 0 THEN 'Unknown' 
        END, 
        ', '
    ) AS [IncludedTypes],
    SUM(Value) AS [TotalValue]
FROM CompanyTypeValues CTV 
JOIN CompanyProfile CP ON CP.CompanyId = CTV.CompanyId 
WHERE CP.Status = 0 AND Date >= '2015-08-11' 
GROUP BY 
    CAST(DATEADD(month, DATEDIFF(month, 0, Date), 0) AS date), 
    W2CliendId 
ORDER BY 
    MonthStarts, 
    W2CliendId

说明:用STRING_AGG将同一分组下的所有类型合并为逗号分隔的字符串,同时保留总数值的聚合,GROUP BY仅保留目标维度。

另外注意:原查询中的W2CliendId疑似拼写错误(应为W2ClientId),如果是笔误记得修正,避免查询报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:46:19