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

Откуда:
Сообщений: 578
Есть результат SELECT из 2 строк

SUM | ID
___________________
163077 | 220
163064 | 219

Как красиво и одним селектом найти разность между значениями в поле SUM (163077 - 163064 = 13)
т.е. от значения с БОЛЬШИМ ID отнять значение с МЕНЬШИМ ID
20 июн 18, 14:53    [21506905]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
Владислав Колосов
Member

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

Хотите посрамить реляционную теорию? :)
20 июн 18, 14:55    [21506928]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 578
Владислав Колосов
RegisteredUser,

Хотите посрамить реляционную теорию? :)

хочу получить 13 )))) в одну строчку )))
20 июн 18, 14:59    [21506959]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
select
 sum(case when row_number() over (order by ID) = 1 then -[SUM] else [SUM] end)
from
 ...
20 июн 18, 15:01    [21506974]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
RegisteredUser,
DECLARE @T TABLE (a money, b int)

INSERT INTO @T VALUES
(163077  ,	220),
(163064  ,	219)

;WITH x(y) AS
(
  SELECT CASE WHEN ROW_NUMBER() OVER (ORDER BY b DESC) %2 = 1 THEN 1 ELSE -1 END * a FROM @T
)
SELECT SUM(y) FROM x
20 июн 18, 15:03    [21506987]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
invm
select
 sum(case when row_number() over (order by ID) = 1 then -[SUM] else [SUM] end)
from
 ...

а так не даст :(
20 июн 18, 15:04    [21506991]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 578
invm
select
 sum(case when row_number() over (order by ID) = 1 then -[SUM] else [SUM] end)
from
 ...


Msg 4109, Level 15, State 1, Line 21
Windowed functions cannot be used in the context of another windowed function or aggregate.
20 июн 18, 15:10    [21507036]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
KRS544
Member

Откуда:
Сообщений: 497
До кучи
DECLARE @T TABLE (a money, b int)

INSERT INTO @T VALUES
(163077  ,	220),
(163064  ,	219)

SELECT a.a-b.a
FROM @t a inner join @t b on a.a> b.a
20 июн 18, 15:13    [21507044]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 578
KRS544
До кучи
DECLARE @T TABLE (a money, b int)

INSERT INTO @T VALUES
(163077  ,	220),
(163064  ,	219)

SELECT a.a-b.a
FROM @t a inner join @t b on a.a> b.a


Пасибочки!

я еще вот так подзапилил

WITH Counts_CTE (Counts, StatusID)  
AS  
( 
	select ....
)
select cte1.Counts - cte2.Counts
from Counts_CTE as cte1
join Counts_CTE as cte2 on cte1.StatusID > cte2.StatusID
20 июн 18, 15:20    [21507063]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
KRS544
Member

Откуда:
Сообщений: 497
RegisteredUser, только isnull(select cte1.Counts - cte2.Counts,0) сделайте, на случай если значения равны...
20 июн 18, 15:22    [21507066]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
KRS544
До кучи
DECLARE @T TABLE (a money, b int)

INSERT INTO @T VALUES
(163077  ,	220),
(163064  ,	219)

SELECT a.a-b.a
FROM @t a inner join @t b on a.a> b.a

главное что бы одинаковых не было :)
20 июн 18, 15:26    [21507075]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
Massa52
Member

Откуда:
Сообщений: 373
Если нужно получить 13 в одну строчку, то
SELECT MAX(a) - MIN(a) FROM @T
20 июн 18, 15:26    [21507078]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Massa52
Если нужно получить 13 в одну строчку, то
SELECT MAX(a) - MIN(a) FROM @T

не читай условия, сразу в продакшн!
20 июн 18, 15:28    [21507084]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 578
KRS544
RegisteredUser, только isnull(select cte1.Counts - cte2.Counts,0) сделайте, на случай если значения равны...

спасибо учту.
НО в моем случае, это скорее ошибка чем "ноль" )))
20 июн 18, 15:42    [21507140]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
Massa52
Member

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

А так?
;WITH x AS
(SELECT MAX(b) mxb, MIN(b) mnb FROM @T)
SELECT (SELECT TOP 1 a FROM @T t1 WHERE t1.b = mxb) - (SELECT TOP 1 a FROM @T t1 WHERE t1.b = mnb) FROM x
20 июн 18, 15:51    [21507177]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3462
TaPaK
Massa52
Если нужно получить 13 в одну строчку, то
SELECT MAX(a) - MIN(a) FROM @T

не читай условия, сразу в продакшн!


+ и критиков сразу посылай

Если нужно получить 13 в одну строчку, то я бы даже так сделал:

SELECT 13 as 'zhelayemij resultat' FROM @T
20 июн 18, 15:56    [21507197]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Massa52
TaPaK,

А так?
;WITH x AS
(SELECT MAX(b) mxb, MIN(b) mnb FROM @T)
SELECT (SELECT TOP 1 a FROM @T t1 WHERE t1.b = mxb) - (SELECT TOP 1 a FROM @T t1 WHERE t1.b = mnb) FROM x


не ну если сегодня официальный день извращений, то уж так :)

SELECT (SELECT TOP 1 a FROM @T t1 ORDER BY b DESC) -  (SELECT TOP 1 a FROM @T t1 ORDER BY b)
20 июн 18, 15:57    [21507198]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
Massa52
Member

Откуда:
Сообщений: 373
TaPaK
Massa52
TaPaK,

А так?
;WITH x AS
(SELECT MAX(b) mxb, MIN(b) mnb FROM @T)
SELECT (SELECT TOP 1 a FROM @T t1 WHERE t1.b = mxb) - (SELECT TOP 1 a FROM @T t1 WHERE t1.b = mnb) FROM x


не ну если сегодня официальный день извращений, то уж так :)

SELECT (SELECT TOP 1 a FROM @T t1 ORDER BY b DESC) -  (SELECT TOP 1 a FROM @T t1 ORDER BY b)

Дошло :)
20 июн 18, 16:03    [21507218]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
KRS544
Member

Откуда:
Сообщений: 497
RegisteredUser
KRS544
RegisteredUser, только isnull(select cte1.Counts - cte2.Counts,0) сделайте, на случай если значения равны...

спасибо учту.
НО в моем случае, это скорее ошибка чем "ноль" )))


Ok, только ошибочка вышла, isnull не поможет в случае равенства...
20 июн 18, 16:07    [21507236]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
KRS544
Member

Откуда:
Сообщений: 497
Ролг Хупин

Если нужно получить 13 в одну строчку, то я бы даже так сделал:
SELECT 13 as 'zhelayemij resultat' FROM @T



Не проканает 2 строчки в результате.
20 июн 18, 16:16    [21507263]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
Посетитель
Member

Откуда:
Сообщений: 1384
Ролг Хупин

Если нужно получить 13 в одну строчку, то я бы даже так сделал:

SELECT 13 as 'zhelayemij resultat' FROM @T


так будет две строки по 13, надо from @t убрать
20 июн 18, 16:16    [21507264]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3462
Посетитель
Ролг Хупин
Если нужно получить 13 в одну строчку, то я бы даже так сделал:

SELECT 13 as 'zhelayemij resultat' FROM @T


так будет две строки по 13, надо from @t убрать


согласен, но ТС надо вроде из таблицы выбрать, чтобы как у взрослых ..

А вот вариант:

SELECT top 1 13 as 'zhelayemij resultat' FROM @T
20 июн 18, 17:00    [21507411]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
RegisteredUser
Member

Откуда:
Сообщений: 578
Ролг Хупин
Посетитель
пропущено...


так будет две строки по 13, надо from @t убрать


согласен, но ТС надо вроде из таблицы выбрать, чтобы как у взрослых ..

А вот вариант:

SELECT top 1 13 as 'zhelayemij resultat' FROM @T


))) я теперь понимаю, как ты накрутил 2188 Сообщений
Они все были такие же остроумные или есть парочку по теме?
20 июн 18, 17:36    [21507561]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
TaPaK
а так не даст :(
Ага. Погорячился.
20 июн 18, 17:37    [21507564]     Ответить | Цитировать Сообщить модератору
 Re: Как получить разность?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3462
RegisteredUser
Ролг Хупин
пропущено...


согласен, но ТС надо вроде из таблицы выбрать, чтобы как у взрослых ..

А вот вариант:

SELECT top 1 13 as 'zhelayemij resultat' FROM @T


))) я теперь понимаю, как ты накрутил 2188 Сообщений
Они все были такие же остроумные или есть парочку по теме?


у всех разное понимание "остроумных" и "по теме".
Какую парочку и по какоцй теме вы хотели бы увидеть?
21 июн 18, 09:36    [21508522]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить