Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить разность? / 25 сообщений из 25, страница 1 из 1
20.06.2018, 14:53
    #39663073
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
Есть результат SELECT из 2 строк
Код: plaintext
1.
2.
3.
4.
  SUM   |     ID
___________________
163077  |	220
163064  |	219

Как красиво и одним селектом найти разность между значениями в поле SUM (163077 - 163064 = 13)
т.е. от значения с БОЛЬШИМ ID отнять значение с МЕНЬШИМ ID
...
Рейтинг: 0 / 0
20.06.2018, 14:55
    #39663076
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
RegisteredUser,

Хотите посрамить реляционную теорию? :)
...
Рейтинг: 0 / 0
20.06.2018, 14:59
    #39663082
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
Владислав КолосовRegisteredUser,

Хотите посрамить реляционную теорию? :)
хочу получить 13 )))) в одну строчку )))
...
Рейтинг: 0 / 0
20.06.2018, 15:01
    #39663085
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
Код: sql
1.
2.
3.
4.
select
 sum(case when row_number() over (order by ID) = 1 then -[SUM] else [SUM] end)
from
 ...
...
Рейтинг: 0 / 0
20.06.2018, 15:03
    #39663089
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
RegisteredUser,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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
...
Рейтинг: 0 / 0
20.06.2018, 15:04
    #39663091
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
invm
Код: sql
1.
2.
3.
4.
select
 sum(case when row_number() over (order by ID) = 1 then -[SUM] else [SUM] end)
from
 ...


а так не даст :(
...
Рейтинг: 0 / 0
20.06.2018, 15:10
    #39663099
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
invm
Код: sql
1.
2.
3.
4.
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.
...
Рейтинг: 0 / 0
20.06.2018, 15:13
    #39663102
KRS544
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
До кучи
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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
...
Рейтинг: 0 / 0
20.06.2018, 15:20
    #39663106
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
KRS544До кучи
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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



Пасибочки!

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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
...
Рейтинг: 0 / 0
20.06.2018, 15:22
    #39663108
KRS544
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
RegisteredUser, только isnull(select cte1.Counts - cte2.Counts,0) сделайте, на случай если значения равны...
...
Рейтинг: 0 / 0
20.06.2018, 15:26
    #39663112
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
KRS544До кучи
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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


главное что бы одинаковых не было :)
...
Рейтинг: 0 / 0
20.06.2018, 15:26
    #39663114
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
Если нужно получить 13 в одну строчку, то
Код: sql
1.
SELECT MAX(a) - MIN(a) FROM @T
...
Рейтинг: 0 / 0
20.06.2018, 15:28
    #39663118
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
Massa52Если нужно получить 13 в одну строчку, то
Код: sql
1.
SELECT MAX(a) - MIN(a) FROM @T


не читай условия, сразу в продакшн!
...
Рейтинг: 0 / 0
20.06.2018, 15:42
    #39663134
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
KRS544RegisteredUser, только isnull(select cte1.Counts - cte2.Counts,0) сделайте, на случай если значения равны...
спасибо учту.
НО в моем случае, это скорее ошибка чем "ноль" )))
...
Рейтинг: 0 / 0
20.06.2018, 15:51
    #39663138
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
TaPaK,

А так?
Код: sql
1.
2.
3.
;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
...
Рейтинг: 0 / 0
20.06.2018, 15:56
    #39663144
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
TaPaKMassa52Если нужно получить 13 в одну строчку, то
Код: sql
1.
SELECT MAX(a) - MIN(a) FROM @T


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

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

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

Код: sql
1.
SELECT 13 as 'zhelayemij resultat' FROM @T
...
Рейтинг: 0 / 0
20.06.2018, 15:57
    #39663145
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
Massa52TaPaK,

А так?
Код: sql
1.
2.
3.
;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



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

Код: sql
1.
SELECT (SELECT TOP 1 a FROM @T t1 ORDER BY b DESC) -  (SELECT TOP 1 a FROM @T t1 ORDER BY b)
...
Рейтинг: 0 / 0
20.06.2018, 16:03
    #39663149
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
TaPaKMassa52TaPaK,

А так?
Код: sql
1.
2.
3.
;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



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

Код: sql
1.
SELECT (SELECT TOP 1 a FROM @T t1 ORDER BY b DESC) -  (SELECT TOP 1 a FROM @T t1 ORDER BY b)


Дошло :)
...
Рейтинг: 0 / 0
20.06.2018, 16:07
    #39663150
KRS544
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
RegisteredUserKRS544RegisteredUser, только isnull(select cte1.Counts - cte2.Counts,0) сделайте, на случай если значения равны...
спасибо учту.
НО в моем случае, это скорее ошибка чем "ноль" )))

Ok, только ошибочка вышла, isnull не поможет в случае равенства...
...
Рейтинг: 0 / 0
20.06.2018, 16:16
    #39663155
KRS544
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
Ролг Хупин
Если нужно получить 13 в одну строчку, то я бы даже так сделал:
Код: sql
1.
SELECT 13 as 'zhelayemij resultat' FROM @T




Не проканает 2 строчки в результате.
...
Рейтинг: 0 / 0
20.06.2018, 16:16
    #39663156
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
Ролг Хупин
Если нужно получить 13 в одну строчку, то я бы даже так сделал:

Код: sql
1.
SELECT 13 as 'zhelayemij resultat' FROM @T



так будет две строки по 13, надо from @t убрать
...
Рейтинг: 0 / 0
20.06.2018, 17:00
    #39663180
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
ПосетительРолг ХупинЕсли нужно получить 13 в одну строчку, то я бы даже так сделал:

Код: sql
1.
SELECT 13 as 'zhelayemij resultat' FROM @T



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

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

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

Код: sql
1.
SELECT top 1 13 as 'zhelayemij resultat' FROM @T
...
Рейтинг: 0 / 0
20.06.2018, 17:36
    #39663204
RegisteredUser
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
Ролг ХупинПосетительпропущено...


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

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

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

Код: sql
1.
SELECT top 1 13 as 'zhelayemij resultat' FROM @T



))) я теперь понимаю, как ты накрутил 2188 Сообщений
Они все были такие же остроумные или есть парочку по теме?
...
Рейтинг: 0 / 0
20.06.2018, 17:37
    #39663205
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
TaPaKа так не даст :(Ага. Погорячился.
...
Рейтинг: 0 / 0
21.06.2018, 09:36
    #39663396
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить разность?
RegisteredUserРолг Хупинпропущено...


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

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

Код: sql
1.
SELECT top 1 13 as 'zhelayemij resultat' FROM @T



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

у всех разное понимание "остроумных" и "по теме".
Какую парочку и по какоцй теме вы хотели бы увидеть?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить разность? / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]