Estou precisando encontrar um caminho para SUM()
todos os valores positivos num
e retornar o SUM()
número positivo de todos e uma linha individual para cada número negativo. Abaixo está uma amostra 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)
E esta é a minha saída desejada (números positivos para cada vendedor SUM()
e negativos recebem uma linha individual retornada):
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
fonte
fonte
UNION ALL
também, nãoUNION
.Isso também funciona:
Suposições:
THEN 0
.salesid ELSE salesid+id+1
funcionaria bem>= 0
( é zero positivo ou negativo? ). Emborax+0=x
pareça tornar o=
sinal desnecessário, ajuda a lembrar que este caso não foi esquecido e como 0 é tratado (como uma SOMA ou como uma linha individual). Sethe SUM() of all positive numbers
significaSUM of strictly positive numbers
(ie> 0), então=
não é necessário.Ele deve ser testado com dados e índices reais, mas com apenas uma varredura de tabela, o desempenho pode ser um pouco melhor em alguns casos.
A ausência de um índice parece ter um impacto menor com esta consulta nos dados de teste abaixo:
fonte
GROUP BY salesid, iif(num >= 0, 0, id)
Consulta legal.