|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.07.2012, 17:03 | #1 |
Форумчанин
Регистрация: 05.12.2009
Сообщений: 253
|
if
Всем привет!
Простенькая задача довела до бешенства (бьюсь головой обо все что рядом), вроде все должно работать а нифига не работает. Если максимально упростить то есть Таблица, Поле1 и Поле2. Нужно если Поле2 не равно Null прибавить его к Поле1 иначе прибавить к Поле1 0 (ноль) или вообще ничего не прибавлять. Вроде все просто Код:
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
|
26.07.2012, 17:06 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Код:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
26.07.2012, 17:21 | #3 |
Форумчанин
Регистрация: 05.12.2009
Сообщений: 253
|
Спасибо большое! Функция очень сильно упростила, общую задачу не пришлось с ифами мудрить.
Все же интересно в чем ошибка в моем коде?
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
|
26.07.2012, 17:37 | #4 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
+ точек с запятой лишних понаставили
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
26.07.2012, 19:49 | #5 |
Форумчанин
Регистрация: 05.12.2009
Сообщений: 253
|
Может я уже достал )) Но хочется разобраться
попробовал так Код:
Попробовал так Код:
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
|
26.07.2012, 19:57 | #6 | ||
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Цитата:
Синтаксис IF http://msdn.microsoft.com/ru-ru/library/ms182717.aspx
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
||
30.07.2012, 10:38 | #7 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Atenon, Ваша проблема в том, что Вы не понимаете одной простой-простой вещи - вам нужно обработать не одну запись - а НАБОР!
тот подход, который Вы пытаете реализовать допустим ТОЛЬКО если в IF будет доступ одной (к I-й, условно говоря) записи. ну, допустим, есть набор данных в таблице если мы можем написать Код:
запрос уже предоставил вам ВСЕ записи - нужно только их обработать по одной. к идеальному варианту Аватар (Поле1 + coalsesce(Поле2, 0) добавлю ещё варианты. Привожу их исключительно для того, чтобы Вы разобрались в том, что недопонимаете... Вариант 1. Разделим обработку записей Поле2 NULL и не NULL: Код:
очень близок к варианту, предложенному Аватар. и, по сути - это то, что Вы хотели написать с помощью IF: суть в том, что для каждой записи в селекте мы проверяем поле2 - если оно NULL - возвращаем значение 0, если не NULL - возвращаем значение поля2: Код:
|
05.08.2012, 20:18 | #8 |
Форумчанин
Регистрация: 05.12.2009
Сообщений: 253
|
Cпасибо за разъяснение очень помогло. Действительно вся путаница в голове возникает из за того что работа происходит с набором данных, надо потренироваться с запросами, недооценил специфику работы sql думал по ходу дела быстро разберусь.
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
|
05.08.2012, 23:54 | #9 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Ага. Ничего, это прийдёт со временем и с опытом.
В качестве азбуки SQL могу порекомендовать книжку Мартина Грубера - "Понимание SQL". |