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

发布于 2024-12-02 22:47:13 字数 295 浏览 0 评论 0原文

我有一个 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。

我该怎么做?

I have a T-SQL query where I want all negative quantities to be zeroed out.

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

Basically if the sum is made up of 5, 5, -1, the result should be 5+5+0=10, and not (5+5+(-1)=9.

How would I do that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

昇り龍 2024-12-09 22:47:13

您可以使用 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)

You could use a CASE statement

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

Or the proprietary IIF version

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

Or a more obscure version

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

or just exclude these rows altogether in the WHERE clause if they are not needed for any other purpose.

In Azure SQL Database you can now also use the GREATEST function for this

GREATEST(i.Quantity,0)
只等公子 2024-12-09 22:47:13

直接过滤掉你不想要的...

WHERE quantity > 0

just filter out the ones you don't want...

WHERE quantity > 0
风轻花落早 2024-12-09 22:47:13

SUM(CASE WHEN i.Quantity < 0 THEN 0 ELSE i.Quantity END) 作为数量

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

烂人 2024-12-09 22:47:13

我知道这个问题很久以前就已经得到了回答,但我认为值得一提的是,零层公式是:

(x+|x|)/2

在 SQL Server 中:

SELECT (i.Quanity - ABS(i.Quanity))/2 AS Quanity
FROM ....

这在很多计算场景中都会出现。不确定这是否是在 TSQL 中执行此操作的最有效方法,或者像 CASE 这样的逻辑语句是否会更快。但这每次都 100% 有效。

I know this has been answered a long time ago but I thinks its worth mentioning that the zero floor formula is:

(x+|x|)/2

In SQL Server its:

SELECT (i.Quanity - ABS(i.Quanity))/2 AS Quanity
FROM ....

This comes up in a lot of computing scenarios. Not sure if it's the most efficient way to do it in TSQL or if logic statements like CASE would be faster. But this works 100% of the time every time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文