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

Откуда:
Сообщений: 8
в разультате запроса , примерно такого
Select код1, код2 from ........
получается следующее

код1 код2

56 0
57 0
400 600

мне нужно, в этом же запросе, сделать третью колонку, код2 - код1, но чтобы вместо отрицательных чисел были нули
т.е. в третьей колонке
0
0
200

подскажите пожалуйста как это сделать в запросе
17 май 11, 11:52    [10663585]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
case
17 май 11, 11:54    [10663603]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
(код2-код1+ABS(код2-код1))/2
17 май 11, 12:03    [10663674]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Начинающий SQL 2008
Member

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

Еще вариант

declare @t table (kod1 int, kod2 int)
insert @t values (56,0), (57,0), (400,600), (-1, -2)

select kod1, kod2, 
(kod2 - kod1 + abs(kod2 - kod1))/2 [(c) iap], 
isnull(nullif(kod2 - kod1, -abs(kod2 - kod1)), 0) [Мой велосипед]
from @t
17 май 11, 12:53    [10664010]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Edkonst2008
Member

Откуда:
Сообщений: 503
Gud
в разультате запроса , примерно такого
...
мне нужно, в этом же запросе, сделать третью колонку, код2 - код1, но чтобы вместо отрицательных чисел были нули
т.е. в третьей колонке
0
0
200

подскажите пожалуйста как это сделать в запросе


Вроде похожий вопрос сегодня был тут
17 май 11, 13:09    [10664159]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Gud
Member

Откуда:
Сообщений: 8
спасибо
с расчетом понятно, но теперь другая проблема

таблица с код1 и код2 создается подзапросом
и вот такая ошибка выходит

Subquery returned more than 1 value. This is not permitted when the subquery
follows =, !=, <, <= , >, >= or when the subquery is used as an expression
17 май 11, 15:11    [10665168]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Gud, покажите запрос. вы где-то пытаетесь с одним скалярным значением сравнить сразу несколько
17 май 11, 15:17    [10665232]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Gud,

ну значит подзапрос вернул более чем одно значение. выход - обеспечить возвращение подзапросом только одного значения например top1...order by или агрегатной функцией или еще как в зависимости от ваших нужд.
17 май 11, 15:18    [10665247]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SomewhereSomehow
Gud,

ну значит подзапрос вернул более чем одно значение. выход - обеспечить возвращение подзапросом только одного значения например top1...order by или агрегатной функцией или еще как в зависимости от ваших нужд.
Может, JOINа будет достаточно?
Сферический запрос в вакууме...
17 май 11, 15:23    [10665296]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Gud
Member

Откуда:
Сообщений: 8
select (lp.Сумма - l.Сумма +ABS (lp.Сумма - l.Сумма))/2
FROM (
select p.code, m.Сумма
from

таб1 m left outer join
таб2 p on p.code = m.p_code,
таб3 zz join
таб3_1 z on zz.code = z.p_code



where m.code = z.Код_окумента
and substring((convert(varchar(30),p.Дата,104)),7,4)= zz.год

) lp LEFT OUTER JOIN
таб1_1 l
ON lp.code = l.p_code
17 май 11, 15:30    [10665363]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Gud
Member

Откуда:
Сообщений: 8
вот запрос
17 май 11, 15:31    [10665372]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Gud, да, блин...
(lp.Сумма - l.Сумма +ABS (lp.Сумма - l.Сумма))/2
На всяк случай:
case when lp.Сумма - l.Сумма<0 then 0 else lp.Сумма - l.Сумма end [но так не пишите, ибо враги догадаются]
17 май 11, 15:42    [10665469]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Gud
вот запрос

да вроде не должно быть тут такой ошибки
вы точно переписали исходный запрос? выполняете его отдельно, или еще с чем-то?
17 май 11, 15:44    [10665484]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Gud
Member

Откуда:
Сообщений: 8
необижайтесь с case, таже ошибка,

даж так ошибку пишет, хз почему

select lp.Сумма
FROM (
select p.code, m.Сумма
from

таб1 m left outer join
таб2 p on p.code = m.p_code,
таб3 zz join
таб3_1 z on zz.code = z.p_code

where m.code = z.Код_окумента
and substring((convert(varchar(30),p.Дата,104)),7,4)= zz.год

) lp LEFT OUTER JOIN
таб1_1 l
ON lp.code = l.p_code
17 май 11, 15:49    [10665536]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Gud,

          LEFT OUTER JOIN таб2 p
          ON        p.code = m.p_code,
                    таб3 zz
                    ...
                    WHERE ...
А вот так, пишите обязательно. Враги не догадаются.

* Это сами написали, или какой-то генератор собирает? Только прошу спокойно воспринимать критику.
17 май 11, 15:50    [10665547]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
iap
Может, JOINа будет достаточно?
Сферический запрос в вакууме...
пока только гадаем=)
Gud
вот запрос

это именно весь запрос, или это подзапрос, часть какого-то большого запроса?
17 май 11, 15:53    [10665590]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Gud, напишите хотя бы словами - чего сделать надобно? А то уж мне не совсем ясно, зачем после лефта, потом фильтровать джойнами... Ведь вы проверку на NULL ни разу не делаете.
17 май 11, 15:57    [10665649]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Gud
необижайтесь с case, таже ошибка,

даж так ошибку пишет, хз почему

select lp.Сумма
FROM (
select p.code, m.Сумма
from

таб1 m left outer join
таб2 p on p.code = m.p_code,
таб3 zz join
таб3_1 z on zz.code = z.p_code

where m.code = z.Код_окумента
and substring((convert(varchar(30),p.Дата,104)),7,4)= zz.год

) lp LEFT OUTER JOIN
таб1_1 l
ON lp.code = l.p_code


скопируйте содержимое текущего окна в студии, где выполняется запрос
опять вы что-то скрываете. и при вставке sql-кода используйте тег SRC
17 май 11, 15:58    [10665662]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
+ вот это всеж-таки перепишите по-человечески, а то без тестовых данных, не уверен, что понимаю, чего оно делает.
, таб3 zz
17 май 11, 15:59    [10665670]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Gud
Member

Откуда:
Сообщений: 8
запрос я пишу,
в одной программе есть текстовый редакор куда пишутся запросы, она же и ошибки выдает,
странная вещь в sql Сервере, все работает ((,
17 май 11, 15:59    [10665671]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Gud,

тогда вы не гадайте, а воружитесь профайлером, он умеет отлавливать запросы которые приходят на сервер. и посмотрите, что ваша программулина редактор отсылает серверу. сразу станет понятно куда копать.
17 май 11, 16:04    [10665715]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Gud
запрос я пишу,
в одной программе есть текстовый редакор куда пишутся запросы, она же и ошибки выдает,
странная вещь в sql Сервере, все работает ((,

ну если в managment studio запрос отрабатывает нормально, то вопросы к создателям одной программы
17 май 11, 16:04    [10665723]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Edkonst2008
Member

Откуда:
Сообщений: 503
Gud
запрос я пишу,
в одной программе есть текстовый редакор куда пишутся запросы, она же и ошибки выдает,
странная вещь в sql Сервере, все работает ((,


Так напишите ошибку, которую программа выдает. Возможно, запрос "обрезается" по длине (да мало ли еще чего там может быть) при передаче серверу.
18 май 11, 08:42    [10668985]     Ответить | Цитировать Сообщить модератору
 Re: вычитание  [new]
Gud
Member

Откуда:
Сообщений: 8
всем спасибо, проблема решена, оказалось что программе куда я запросы пишу, в результате нужно только одну строку, с ненулевым значением, как мне сказали т.к. это будет подзапрос в еще одном запросе
19 май 11, 09:04    [10675770]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить