2012-03-28 20 views
2

次のクエリを実行しています。SQL Server 2005 IF

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

IF文の構文エラーが発生します。

動詞は2つの異なるテーブルの列を比較し、等しくない場合は3番目のテーブルのNewColumnで "変更済み"と保存します。これはInsert INTO queryです。

T-> Table 
C->Column 
+0

SELECT T1.C1、T1.C2、T2.C1、T2.C2 ..、IF(T1.C3 <> T2.C3、 "Changed"、 "1")AS NewColumn ....明確にする私のクエリ.. –

+1

可能な複製[あなたはどのようにIF ...それでは、SQL SELECTで実行しますか?](http://stackoverflow.com/questions/63447/how-do-you-perform-an-if- then-in-an-SQL-select) – Yuck

+0

UDFを作成して、 'IIF'(immediate if)関数を実行することができます。ほとんどの人(86%)は「CASE」という表現に満足しています。 – HABO

答えて

3
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 ... 
+0

ありがとう、トンアレックス..これは働いています.. –

5

この場合、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 
0

あなたは文の中の状態のチェックを使用したい場合はWHEN

MSDN

、あなたはCASEを使用する必要がありますしかし、あなたは複数行の文を持っている場合は、IF ELSE句を使用することができます

1

他にも、CASE WHEN ELSE ENDを使用する必要があることが既に説明されています。 2つの違いは、IFがコードの実行フローを変更することです。IFステートメントの結果に応じて条件付きでコードを実行できます。 CASEは実行フローを変更しません。単に値をチェックし、結果に応じて異なる結果を得ることができます。

+0

あなたのコメントありがとう。私はCASEを使ってこれを走らせている –