Мне нужно найти путь ко SUM()
всем положительным значениям num
и вернуть SUM()
все положительные числа и отдельную строку для каждого отрицательного числа. Ниже приведен пример 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)
И это мой желаемый результат (положительные числа для каждого salesid SUM()
и отрицательные значения возвращают отдельную строку):
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
источник
источник
UNION ALL
а неUNION
.Это тоже работает:
Предположения:
THEN 0
.salesid ELSE salesid+id+1
будет работать так же>= 0
( Ноль положительный или отрицательный? ). Хотяx+0=x
кажется, что=
знак делает ненужным, это помогает помнить, что этот случай не был забыт и как обрабатывается 0 (как SUM или как отдельная строка). Еслиthe SUM() of all positive numbers
означаетSUM of strictly positive numbers
(то есть> 0), то=
не нужно.Он должен быть протестирован с реальными данными и индексами, но при сканировании только одной таблицы в некоторых случаях производительность может быть немного лучше.
Отсутствие индекса, по-видимому, оказывает меньшее влияние с этим запросом на тестовые данные ниже:
источник
GROUP BY salesid, iif(num >= 0, 0, id)
Классный запрос.