Potrzebuję znaleźć sposób na SUM()
wszystkie wartości dodatnie num
i zwrócić SUM()
wszystkie liczby dodatnie i pojedynczy wiersz dla każdej liczby ujemnej. Poniżej znajduje się przykładowy DDL:
Create Table #Be
(
id int
, salesid int
, num decimal(16,4)
)
Insert Into #BE Values
(1, 1, 12.32), (2, 1, -13.00), (3, 1, 14.00)
, (4, 2, 12.12), (5, 2, 14.00), (6, 2, 21.23)
, (7, 3, -12.32), (8,3, -43.23), (9, 3, -2.32)
I to jest mój pożądany wynik (liczby dodatnie dla każdego Salesid SUM()
i negatywy otrzymują indywidualną linię zwracaną):
salesid num
1 26.32
1 -13.00
2 47.35
3 -12.32
3 -43.23
3 -2.32
sql-server
sql-server-2008
t-sql
użytkownik2676140
źródło
źródło
UNION ALL
też nieUNION
.To też działa:
Założenia:
THEN 0
.salesid ELSE salesid+id+1
też by działał>= 0
( Czy zero jest dodatnie czy ujemne? ). Chociażx+0=x
wydaje się, że=
znak jest niepotrzebny, pomaga pamiętać, że ta sprawa nie została zapomniana i jak obsługiwane jest 0 (jako SUMA lub jako pojedynczy wiersz). Jeślithe SUM() of all positive numbers
oznaczaSUM of strictly positive numbers
(tj.> 0),=
to nie jest potrzebne.Musi zostać przetestowany z rzeczywistymi danymi i indeksami, ale przy zaledwie 1 skanie tabeli, wydajność może być nieco lepsza w niektórych przypadkach.
Brak indeksu wydaje się mieć mniejszy wpływ na to zapytanie dotyczące danych testowych poniżej:
źródło
GROUP BY salesid, iif(num >= 0, 0, id)
Fajne zapytanie.