Рейтинг:
4
Kevheathfield
Привет,
Я думаю, что вы, возможно, неправильно истолковываете команду Iif.
В документации говорится::
boolean_expression
A valid Boolean expression.
If this argument is not a Boolean expression, then a syntax error is raised.
true_value
Value to return if boolean_expression evaluates to true.
false_value
Value to return if boolean_expression evaluates to false.
Следовательно, ваш синтаксис
select * from TableNm where iif(CAl1='True',(CalStatu1='Done' and CalDis='Pending'),(CalFinal='True'))
неверно в том смысле, что значение true_value на самом деле является возвращаемым значением.
Очень легко изменить это на оператор case, чтобы сделать ваш проект/запрос переносимым со всеми экземплярами SQL server.
К сожалению, в настоящее время у меня нет MSSQL, но, возможно, нижеприведенное поможет;
select * from TableNm where
case cal1 = 'true'
then CalStatu1='Done' and CalDis='Pending'
else
CalFinal='True'
end
Надеюсь, это поможет.
hareshdgr8
нет, сэр, та же ошибка получения над CalStatu1='сделано' и CalDis='ожидание'
Скрыть скопировать код
Incorrect syntax near '='.
Kevheathfield
Мои извинения, я понял, что есть синтаксис, который я пропустил. (Немного трудно без IDE)
Пожалуйста, попробуйте;
select * from TableNm
where CASE WHEN cal1 = 'true' THEN
CalStatu1 = 'Done' and cal1 = 'true' else CalFinal = 'True' END
hareshdgr8
нет сэр та же ошибка
Неверный синтаксис рядом с '='.
Kevheathfield
Хм, я могу запустить это на экземпляре MySql..
Вот моя последняя попытка канавы, пожалуйста, имейте в виду, что это не оптимально, но, основываясь на названиях столбцов в вопросе, я предполагаю, что это для домашнего проекта.
select * from tablenm
WHERE(cal1 = 'true' AND CalStatu1 = 'Done' and cal1 = 'true')
OR (cal1 != 'true' AND CalFinal = 'True'));
CHill60
WHERE(cal1 = 'true' AND CalStatu1 = 'Done' and cal1 = 'true')
должно быть
WHERE (CAl1='True' AND CalStatu1='Done' AND CalDis='Pending')
Вы тестируете cal1 = хххххххх дважды
hareshdgr8
Это работа для меня, но не уверен, насколько правильно, но спасибо за вашу помощь ...
Рейтинг:
18
CHill60
Вам не нужен IIF и вам не нужен CASE, вам просто нужно правильно отсортировать ваши AND и OR, например
select * from TableNm where
(CAl1='True' AND CalStatu1='Done' AND CalDis='Pending')
OR
(Cal1 <> 'True' AND CalFinal='True')
Обратите внимание на использование скобок для группировки критериев и. Смешивание и и или вместе без скобок-очень распространенная ошибка. Всегда используйте скобки, чтобы прояснить свое намерение.
С другой стороны, если вы пытаетесь обновить столбцы, то вам нужно делать их по одному за раз и в инструкции Update, например
UPDATE TableNm
SET CalStatu1 = CASE WHEN Cal1 = 'True' THEN 'Done' ELSE CalStatu1 END,
CalFinal = CASE WHEN CAl1 = 'True' THEN CalFinal ELSE 'True' END
hareshdgr8
Спасибо за вашу помощь ...
Сэр... :-)