J'ai besoin de trouver un moyen d'accéder à SUM()
toutes les valeurs positives num
et de renvoyer SUM()
tous les nombres positifs et une ligne individuelle pour chaque nombre négatif. Voici un exemple de 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)
Et voici ma sortie souhaitée (des nombres positifs pour chaque salesid SUM()
et négatifs obtiennent une ligne individuelle):
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
la source
la source
UNION ALL
aussi, nonUNION
.Cela fonctionne aussi:
Hypothèses:
THEN 0
.salesid ELSE salesid+id+1
fonctionnerait aussi>= 0
( Est-ce que zéro est positif ou négatif? ). Bien que celax+0=x
semble rendre le=
signe inutile, il permet de se rappeler que ce cas n'a pas été oublié et comment le 0 est traité (en tant que SUM ou en tant que ligne individuelle). Sithe SUM() of all positive numbers
signifieSUM of strictly positive numbers
(c'est-à-dire> 0), alors=
n'est pas nécessaire.Il doit être testé avec des données et des index réels, mais avec un seul scan de table, les performances peuvent être un peu meilleures dans certains cas.
L'absence d'index semble avoir un impact moindre avec cette requête sur les données de test ci-dessous:
la source
GROUP BY salesid, iif(num >= 0, 0, id)
Cool query.