Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL1  [new]
qwerty0001
Member

Откуда:
Сообщений: 1
Подскажите.

Дана таблица с одним полем x.(в этом поле положительные и отрицательные числа)

Найти сумму положительных и отрицательных чисел без union и case.
18 июл 17, 19:13    [20655382]     Ответить | Цитировать Сообщить модератору
 Re: SQL1  [new]
aleks2
Guest
select pos = ( select sum(x) from таблица where x >0 ), neg = ( select sum(x) from таблица where x <0 );


Скажи своим собеседователям, что они идиоты.
18 июл 17, 19:21    [20655400]     Ответить | Цитировать Сообщить модератору
 Re: SQL1  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
declare @t table (x int);
insert into @t
 values (1), (2), (3), (-4), (-5), (-6);

select
 sum((sign(sign(x) - 1) + 1) * x),
 -sum((sign(sign(x) + 1) - 1) * x)
from
 @t;
18 июл 17, 19:43    [20655444]     Ответить | Цитировать Сообщить модератору
 Re: SQL1  [new]
msLex
Member

Откуда:
Сообщений: 8091
qwerty0001,

group by sign(x)
18 июл 17, 19:44    [20655446]     Ответить | Цитировать Сообщить модератору
 Re: SQL1  [new]
LoopN
Guest
select SUM(x*NULLIF(SIGN(i),-1)) ,-1*SUM( x*NULLIF(SIGN(x),1))  from tlb
18 июл 17, 19:50    [20655456]     Ответить | Цитировать Сообщить модератору
 Re: SQL1  [new]
LoopN
Guest
вариант group by sign(x) победил
18 июл 17, 19:52    [20655459]     Ответить | Цитировать Сообщить модератору
 Re: SQL1  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7771
LoopN,

sign() - это обертка.
18 июл 17, 21:13    [20655597]     Ответить | Цитировать Сообщить модератору
 Re: SQL1  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33683
Блог
select sum(iif(number>0, number,0)*1.), sum(iif(number<0, number,0)*1.)
  from master..spt_values


18 июл 17, 21:30    [20655630]     Ответить | Цитировать Сообщить модератору
 Re: SQL1  [new]
Чариндекс конвертера
Guest
select sum((    charindex('-', convert(char(11), x))) * x) neg,
       sum((1 - charindex('-', convert(char(11), x))) * x) pos
19 июл 17, 02:52    [20656016]     Ответить | Цитировать Сообщить модератору
 Re: SQL1  [new]
aleks2
Guest
Осподе, извращенцы

select pos = ( sum(ABS(x)) + sum(x) ) / 2, neg = ( sum(ABS(x)) - sum(x) ) / 2
  from таблица 


ЗЫ. При прочих равных - "очевидный и самодокументируемый" запрос предпочтительнее.
19 июл 17, 05:19    [20656026]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить