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

SQL Server下数据集多条件过滤分组后对avail列求和如何实现

原写法错误说明

你提交的SQL存在几个明显的语法和逻辑问题:

  • SQL不支持直接用+拼接两个WHERE条件块
  • 单条查询仅能出现1个WHERE关键字,多个筛选条件用AND/OR拼接即可
  • SQL Server中等值判断用=,不是==
  • SELECT中出现的非聚合字段date必须包含在GROUP BY子句中
正确实现方案

需求本质是life为keep的记录avail值计算2次,life为stay的记录avail值计算1次,有两种常用实现方式:

方案1:UNION ALL合并两次查询(逻辑最直观,和你描述的需求完全对应)

SELECT name, date, SUM(avail) AS sum_avail
FROM (
    -- 第一部分筛选结果
    SELECT name, date, avail
    FROM 你的表名
    WHERE date = '9/1/2021' 
      AND stack != 'unused' 
      AND life IN ('keep','stay')
    UNION ALL
    -- 第二部分筛选结果叠加
    SELECT name, date, avail
    FROM 你的表名
    WHERE date = '9/1/2021' 
      AND stack != 'unused' 
      AND life = 'keep'
) t
GROUP BY name, date

方案2:单表扫描加权计算(性能更高,仅需扫描一次表)

SELECT 
    name,
    date,
    SUM(avail * CASE 
        WHEN life = 'keep' THEN 2 
        WHEN life = 'stay' THEN 1 
        ELSE 0 
    END) AS sum_avail
FROM 你的表名
WHERE date = '9/1/2021'
  AND stack != 'unused'
  AND life IN ('keep','stay')
GROUP BY name, date

两种写法执行后都可以得到你预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:12:03