Necesito encontrar una forma de obtener SUM()todos los valores positivos numy 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 ALLtambién, noUNION.Esto también funciona:
Suposiciones
THEN 0.salesid ELSE salesid+id+1funcionaría tan bien>= 0( ¿Es cero positivo o negativo? ). Aunquex+0=xparece 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 numberssignificaSUM 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.