2011-09-06 9 views
8

Mam zapytanie T-SQL, w którym chcę zerować wszystkie wartości ujemne.Jak wyzerować wszystkie liczby ujemne w oświadczeniu T-SQL dla grupy

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

Zasadniczo, jeśli suma składa się z 5, 5, 1, wynik powinien być 5 + 5 + 0 = 10, a nie (5 + 5 + (- 1). = 9

Jak to zrobić?

Odpowiedz

16

można użyć CASE oświadczenie

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

lub bardziej niejasne wersję

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

lub po prostu wyklucz te wiersze w całości w klauzuli WHERE, jeśli nie są one potrzebne do jakichkolwiek innych celów.

+0

lub 'gdzie i.Quantity> 0' – cetver

+0

@cetver - Przed wami! –

1

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

5

prostu odfiltrować te, których nie chcesz ...

WHERE quantity > 0 
Powiązane problemy