SQL SERVER 2005 ЕСЛИ ПРОСТО - PullRequest
2 голосов
/ 28 марта 2012

Я выполняю следующий запрос.

SELECT T1.C1, T2.C2..., 
IF( T1.C1<>T2.C1,"Changed","1") AS NewColumn
From T1 INNER JOIN T2
Where condition..

Я получаю синтаксическую ошибку для оператора IF.

Мотивом является сравнение столбцов из двух разных таблиц, если они не равны, сохраните как «Изменено» в NewColumn третьей таблицы.

T-> Table
C->Column

Ответы [ 4 ]

5 голосов
/ 28 марта 2012

Вы должны использовать CASE WHEN в этом контексте.

SELECT     T1.C1, 
           T2.C2..., 
           CASE WHEN T1.C1<>T2.C1 THEN 'Changed' ELSE '1' END AS NewColumn 
FROM       T1 
INNER JOIN T2 
WHERE      condition
3 голосов
/ 28 марта 2012
SELECT T1.C1, T2.C2..., 
    CASE WHEN T1.C1<>T2.C1 THEN 'Changed' ELSE '1' END AS NewColumn 
From T1 INNER JOIN T2 ON ... 
Where ...
1 голос
/ 28 марта 2012

Другие уже упоминали, что вы должны использовать CASE WHEN ELSE END.Разница между ними заключается в том, что IF изменяет поток выполнения вашего кода - вы можете условно выполнить код в зависимости от результата вашего оператора IF.CASE не меняет поток выполнения - он просто позволяет вам проверить значение, а затем получить другой результат в зависимости от результата.

0 голосов
/ 28 марта 2012

Если вы хотите использовать проверки условий внутри оператора, вы должны использовать CASE WHEN

MSDN

Но если у вас есть многострочные операторы, вы можете использовать IFELSE пункт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...