Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
RegisteredUser Member Откуда: Сообщений: 631 |
Есть результат SELECT из 2 строк
Как красиво и одним селектом найти разность между значениями в поле SUM (163077 - 163064 = 13) т.е. от значения с БОЛЬШИМ ID отнять значение с МЕНЬШИМ ID |
20 июн 18, 14:53 [21506905] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8335 |
RegisteredUser, Хотите посрамить реляционную теорию? :) |
20 июн 18, 14:55 [21506928] Ответить | Цитировать Сообщить модератору |
RegisteredUser Member Откуда: Сообщений: 631 |
хочу получить 13 )))) в одну строчку ))) |
||
20 июн 18, 14:59 [21506959] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9639 |
select sum(case when row_number() over (order by ID) = 1 then -[SUM] else [SUM] end) from ... |
20 июн 18, 15:01 [21506974] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
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] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
а так не даст :( |
||
20 июн 18, 15:04 [21506991] Ответить | Цитировать Сообщить модератору |
RegisteredUser Member Откуда: Сообщений: 631 |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
RegisteredUser Member Откуда: Сообщений: 631 |
Пасибочки! я еще вот так подзапилил 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] Ответить | Цитировать Сообщить модератору |
KRS544 Member Откуда: Сообщений: 497 |
RegisteredUser, только isnull(select cte1.Counts - cte2.Counts,0) сделайте, на случай если значения равны... |
20 июн 18, 15:22 [21507066] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
главное что бы одинаковых не было :) |
||
20 июн 18, 15:26 [21507075] Ответить | Цитировать Сообщить модератору |
Massa52 Member Откуда: Сообщений: 382 |
Если нужно получить 13 в одну строчку, тоSELECT MAX(a) - MIN(a) FROM @T |
20 июн 18, 15:26 [21507078] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
не читай условия, сразу в продакшн! |
||
20 июн 18, 15:28 [21507084] Ответить | Цитировать Сообщить модератору |
RegisteredUser Member Откуда: Сообщений: 631 |
спасибо учту. НО в моем случае, это скорее ошибка чем "ноль" ))) |
||
20 июн 18, 15:42 [21507140] Ответить | Цитировать Сообщить модератору |
Massa52 Member Откуда: Сообщений: 382 |
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] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3972 |
+ и критиков сразу посылай ![]() Если нужно получить 13 в одну строчку, то я бы даже так сделал: SELECT 13 as 'zhelayemij resultat' FROM @T |
||||
20 июн 18, 15:56 [21507197] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
не ну если сегодня официальный день извращений, то уж так :) 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] Ответить | Цитировать Сообщить модератору |
Massa52 Member Откуда: Сообщений: 382 |
Дошло :) |
||||
20 июн 18, 16:03 [21507218] Ответить | Цитировать Сообщить модератору |
KRS544 Member Откуда: Сообщений: 497 |
Ok, только ошибочка вышла, isnull не поможет в случае равенства... |
||||
20 июн 18, 16:07 [21507236] Ответить | Цитировать Сообщить модератору |
KRS544 Member Откуда: Сообщений: 497 |
Не проканает ![]() |
||
20 июн 18, 16:16 [21507263] Ответить | Цитировать Сообщить модератору |
Посетитель Member Откуда: Сообщений: 1210 |
так будет две строки по 13, надо from @t убрать |
||
20 июн 18, 16:16 [21507264] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3972 |
согласен, но ТС надо вроде из таблицы выбрать, чтобы как у взрослых .. А вот вариант: SELECT top 1 13 as 'zhelayemij resultat' FROM @T |
||||
20 июн 18, 17:00 [21507411] Ответить | Цитировать Сообщить модератору |
RegisteredUser Member Откуда: Сообщений: 631 |
))) я теперь понимаю, как ты накрутил 2188 Сообщений Они все были такие же остроумные или есть парочку по теме? |
||||
20 июн 18, 17:36 [21507561] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9639 |
|
||
20 июн 18, 17:37 [21507564] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3972 |
у всех разное понимание "остроумных" и "по теме". Какую парочку и по какоцй теме вы хотели бы увидеть? |
||||
21 июн 18, 09:36 [21508522] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |