Как обнулить все отрицательные числа в групповом операторе T-SQL - PullRequest
8 голосов
/ 06 сентября 2011

У меня есть запрос 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.

Как бы я это сделал?

Ответы [ 4 ]

17 голосов
/ 06 сентября 2011

Вы можете использовать оператор CASE

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

или более неясную версию

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

или просто исключить эти строки в предложении WHERE, если онинужен для любых других целей.

5 голосов
/ 06 сентября 2011

просто отфильтруйте те, которые вам не нужны ...

WHERE quantity > 0
1 голос
/ 27 января 2019

Я знаю, что на это уже давно дан ответ, но я думаю, стоит упомянуть, что формула нулевого этажа:

(x+|x|)/2

В SQL Server это:встречается во многих компьютерных сценариях.Не уверен, что это наиболее эффективный способ сделать это в TSQL или логические операторы вроде CASE будут быстрее.Но это работает 100% времени каждый раз.

1 голос
/ 06 сентября 2011

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

...