Ich brauche den einen Weg zu finden , SUM()
für alle positiven Werte num
und die Rückkehr SUM()
aller positiven Zahlen und einer einzelnen Zeile für jede negative Zahl. Unten finden Sie eine Beispiel-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)
Und dies ist meine gewünschte Ausgabe (positive Zahlen für jede Verkäuferin SUM()
und negative erhalten eine individuelle Zeile zurück):
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
user2676140
quelle
quelle
UNION ALL
auch gebraucht , nichtUNION
.Das funktioniert auch:
Annahmen:
THEN 0
.salesid ELSE salesid+id+1
würde auch funktionieren>= 0
( Ist Null positiv oder negativ? ). Obwohlx+0=x
das=
Zeichen unnötig zu sein scheint , hilft es, sich daran zu erinnern, dass dieser Fall nicht vergessen wurde und wie mit 0 umgegangen wird (als SUMME oder als einzelne Zeile). Wennthe SUM() of all positive numbers
bedeutetSUM of strictly positive numbers
(dh> 0), dann=
wird nicht benötigt.Es muss mit realen Daten und Indizes getestet werden, aber mit nur einem Tabellenscan kann die Leistung in einigen Fällen etwas besser sein.
Das Fehlen eines Index wirkt sich bei dieser Abfrage weniger auf die folgenden Testdaten aus:
quelle
GROUP BY salesid, iif(num >= 0, 0, id)
Coole Abfrage.