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

如何在SQL中实现当Column B为0时取Column A值生成Column C

实现“取B值,B为0时取A值”的SQL计算列

你可以用SQL的CASE表达式来实现和Excel IF(B2=0,A2,B2)完全相同的逻辑——这是标准SQL语法,几乎所有关系型数据库(比如MySQL、PostgreSQL、SQL Server等)都支持。如果你的数据库支持IF函数(比如MySQL、SQLite),也可以直接用IF函数,不过CASE的兼容性更好。

修正并修改后的SQL代码

首先,你的原SQL存在几个语法和逻辑问题:

  • location as loc后面缺少逗号
  • 聚合后的分组字段不需要包含columnA和columnB(因为你已经对这两列做了Sum聚合,应该按date, shift, location分组)

以下是修正后并添加了Column C的完整代码:

SELECT 
    date, 
    shift, 
    location AS loc, 
    SUM(columnA) AS A, 
    SUM(columnB) AS B,
    -- 核心逻辑:当B的总和为0时取A的总和,否则取B的总和
    CASE 
        WHEN SUM(columnB) = 0 THEN SUM(columnA) 
        ELSE SUM(columnB) 
    END AS C
FROM data 
WHERE 
    date = (SELECT max(date) FROM data) 
    AND location IN ('locationA','LocationB') 
GROUP BY date, shift, location 
ORDER BY date, shift

如果你的数据库支持IF函数(比如MySQL),也可以把CASE替换成更简洁的IF写法:

IF(SUM(columnB) = 0, SUM(columnA), SUM(columnB)) AS C

最终效果

执行上述代码后,你会得到符合预期的结果,类似:

DateShiftLocationValue AValue BValue C
21-05-2018DaylocationA0.041222040.8870575310.887057531
21-05-2019DaylocationA0.9284998270.5804023960.580402396
21-05-2020DaylocationB0.09268944800.092689448
21-05-2021DaylocationA0.8480769290.3001754530.300175453
21-05-2022DaylocationA0.23151533200.231515332
21-05-2023DaylocationB0.9825226620.5603356780.560335678

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:26:09