Necesito encontrar una forma de obtener SUM()
todos los valores positivos num
y devolver SUM()
todos los números positivos y una fila individual para cada número negativo. A continuación se muestra una muestra 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)
Y esta es mi salida deseada (los números positivos para cada salesid SUM()
y los negativos obtienen una línea individual devuelta):
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
usuario2676140
fuente
fuente
UNION ALL
también, noUNION
.Esto también funciona:
Suposiciones
THEN 0
.salesid ELSE salesid+id+1
funcionaría tan bien>= 0
( ¿Es cero positivo o negativo? ). Aunquex+0=x
parece que el=
signo es innecesario, ayuda a recordar que este caso no se ha olvidado y cómo se maneja 0 (como SUM o como fila individual). Sithe SUM() of all positive numbers
significaSUM of strictly positive numbers
(es decir,> 0), entonces=
no es necesario.Debe probarse con datos e índices reales, pero con solo 1 escaneo de tabla, el rendimiento puede ser un poco mejor en algunos casos.
La ausencia de un índice parece tener un impacto menor con esta consulta en los datos de prueba a continuación:
fuente
GROUP BY salesid, iif(num >= 0, 0, id)
consulta genial.