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

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

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

Хотите посрамить реляционную теорию? :)
хочу получить 13 )))) в одну строчку )))
...
Рейтинг: 0 / 0
Как получить разность?
    #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
Как получить разность?
    #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
Как получить разность?
    #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
Как получить разность?
    #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
Как получить разность?
    #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
Как получить разность?
    #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
Как получить разность?
    #39663108
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUser, только isnull(select cte1.Counts - cte2.Counts,0) сделайте, на случай если значения равны...
...
Рейтинг: 0 / 0
Как получить разность?
    #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
Как получить разность?
    #39663114
Massa52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужно получить 13 в одну строчку, то
Код: sql
1.
SELECT MAX(a) - MIN(a) FROM @T
...
Рейтинг: 0 / 0
Как получить разность?
    #39663118
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Massa52Если нужно получить 13 в одну строчку, то
Код: sql
1.
SELECT MAX(a) - MIN(a) FROM @T


не читай условия, сразу в продакшн!
...
Рейтинг: 0 / 0
Как получить разность?
    #39663134
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KRS544RegisteredUser, только isnull(select cte1.Counts - cte2.Counts,0) сделайте, на случай если значения равны...
спасибо учту.
НО в моем случае, это скорее ошибка чем "ноль" )))
...
Рейтинг: 0 / 0
Как получить разность?
    #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
Как получить разность?
    #39663144
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKMassa52Если нужно получить 13 в одну строчку, то
Код: sql
1.
SELECT MAX(a) - MIN(a) FROM @T


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

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

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

Код: sql
1.
SELECT 13 as 'zhelayemij resultat' FROM @T
...
Рейтинг: 0 / 0
Как получить разность?
    #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
Как получить разность?
    #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
Как получить разность?
    #39663150
KRS544
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RegisteredUserKRS544RegisteredUser, только isnull(select cte1.Counts - cte2.Counts,0) сделайте, на случай если значения равны...
спасибо учту.
НО в моем случае, это скорее ошибка чем "ноль" )))

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




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

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



так будет две строки по 13, надо from @t убрать
...
Рейтинг: 0 / 0
Как получить разность?
    #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
Как получить разность?
    #39663204
RegisteredUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ролг ХупинПосетительпропущено...


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

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

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

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



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


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

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

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



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

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


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