sql - 如何将 group-by T-SQL 语句中的所有负数清零

标签 sql sql-server tsql group-by

我有一个 T-SQL 查询,我希望将所有负数清零。

SELECT 
p.productnumber, 
v.[Description],
SUM(i.Quantity) as quantity
FROM ...
LEFT JOIN ...
LEFT JOIN ...
LEFT JOIN ...
GROUP BY productnumber, [Description]

基本上,如果总和由 5, 5, -1 组成,结果应该是 5+5+0=10,而不是 (5+5+(-1)=9。

我该怎么做?

最佳答案

您可以使用CASE语句

SUM(CASE WHEN i.Quantity < 0 THEN 0 ELSE i.Quantity END)

或者专有的IIF版本

IIF(i.Quantity < 0, 0, i.Quantity)

或者更晦涩的版本

SUM(NULLIF(i.Quantity, -ABS(i.Quantity)))

或者如果不需要用于任何其他目的,则将这些行完全排除在 WHERE 子句中。

在 Azure SQL 数据库中,您现在还可以使用 GREATEST函数用于此

GREATEST(i.Quantity,0)

关于sql - 如何将 group-by T-SQL 语句中的所有负数清零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7320155/

相关文章:

java - 选择更新之前是一个好方法还是反之亦然?

sql - 使所有单词在每个位置都有特殊字符列表 SQL Server

mysql - 将sql server存储过程转换为MySQL(xampp)

mysql - 声明一个表有一个列是两列的乘积

sql - 归一化硬件

MYSQL 抛出语法错误插入

sql - 将一列的值除以另一列

sql - 在 sql join 中合并部分重复的行

sql - 在SQL Server中,像 "use <<DatabaseName>>",如何对 "use <<ServerName>>"查询命令

sql - 我们可以在 SELECT 和 FROM 之间写子查询吗