Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Degun Member Откуда: Сообщений: 205 |
Необходимо реализовать update, который бы обновлял в таблице поле AwgPositionPrice, соответствующий определённой дате, значениями AwgPositionPrice этой же таблицы, соответствующей другой дате при некотрых условиях. Я попробовал так:update DepoLimits set AwgPositionPrice=COALESCE( (select d.AwgPositionPrice from DepoLimits d where d.LoadDate=CONVERT(datetime,'23.12.2013',104) and d.AwgPositionPrice!=0 and d.LimitKind='T0' and d.ClientCode=ClientCode and d.SecCode=SecCode and d.FirmId=FirmId and d.Trdacc=Trdacc) ,0) where LoadDate=CONVERT(datetime,'24.12.2013',104) and AwgPositionPrice=0 Но пишет ошибку: Msg 512, Level 16, State 1, Line 1 Как правильно реализовать данный запрос? |
25 дек 13, 18:13 [15346836] Ответить | Цитировать Сообщить модератору |
adv Member Откуда: Сообщений: 3333 |
вложенный запрос вернул одно значение. |
||
25 дек 13, 18:22 [15346854] Ответить | Цитировать Сообщить модератору |
Degun Member Откуда: Сообщений: 205 |
Да. Я так понял, что вложенный подзапрос возвращает более одной записи, т. к. в разделе where подзапроса sql не понимает, что поля с правой стороны равенства относятся к внешней таблице. Т. е. по сути он эквивалентен запросу:update DepoLimits set AwgPositionPrice=COALESCE( (select d.AwgPositionPrice from DepoLimits d where d.LoadDate=CONVERT(datetime,'23.12.2013',104) and d.AwgPositionPrice!=0 and d.LimitKind='T0' and d.ClientCode=d.ClientCode and d.SecCode=d.SecCode and d.FirmId=d.FirmId and d.Trdacc=d.Trdacc),0) where LoadDate=CONVERT(datetime,'24.12.2013',104) and AwgPositionPrice=0 |
25 дек 13, 18:31 [15346892] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
update x set x.Field = y.Field from DepoLimits x inner join DepoLimits y on и все ваши условия |
25 дек 13, 18:36 [15346908] Ответить | Цитировать Сообщить модератору |
Degun Member Откуда: Сообщений: 205 |
Спасибо. Вот правильный вариант:update t set t.AwgPositionPrice=d.AwgPositionPrice from DepoLimits t inner join DepoLimits d ON d.LoadDate=CONVERT(datetime,'23.12.2013',104) and d.AwgPositionPrice!=0 and d.LimitKind=t.LimitKind and d.ClientCode=t.ClientCode and d.SecCode=t.SecCode and d.FirmId=t.FirmId and d.Trdacc=t.Trdacc where t.LoadDate=CONVERT(datetime,'24.12.2013',104) and t.AwgPositionPrice=0 |
25 дек 13, 18:58 [15346967] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |