如何将SQL中CASE WHEN语句返回的负数结果转换为0
修改方法
你原SQL有一处基础语法错误:字段[E]后缺少逗号,直接执行会报语法错,修改逻辑时需要一并补上。
针对[A] = ''时[B] - [C]出现负数要置0的需求,只需要在对应计算分支追加一层非负判断即可,全数据库通用的写法如下:
SELECT [A], [B], [C], [D], [E], CASE WHEN [A] <> '' THEN [B] + [C] WHEN [A] = '' THEN CASE WHEN [B] - [C] < 0 THEN 0 ELSE [B] - [C] END ELSE '' END AS [Result] FROM [TableA]
如果你用的数据库支持内置函数,还可以用更简洁的写法:
- 支持
IIF逻辑判断的环境(SQL Server 2012+、Access、MySQL等):该分支可直接写为IIF([B] - [C] < 0, 0, [B] - [C]) - 支持
GREATEST取最大值函数的环境(MySQL、PostgreSQL、Oracle等):该分支可直接写为GREATEST([B] - [C], 0),自动返回计算值和0中的较大值,负数会被直接替换为0。
补充提示:如果
[B]、[C]是数值类型字段,ELSE ''的返回值会触发隐式类型转换,在部分开启严格模式的数据库中会抛出错误,建议根据业务需求调整ELSE分支的返回值,比如需要空值可替换为NULL。
内容的提问来源于stack exchange,提问作者user19084244
相关产品推荐
相关产品推荐

