2012-03-28 14 views
2

Ich führe folgende Abfrage.SQL SERVER 2005 IF ELSE

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

Ich bekomme Syntaxfehler für IF-Anweisung.

Motiv ist es, Spalten aus zwei verschiedenen Tabellen zu vergleichen, wenn nicht gleich als "Geändert" in NewColumn der dritten Tabelle .. Dies ist ein Insert INTO query.

T-> Table 
C->Column 
+0

WÄHLEN T1.C1, T1.C2, T2.C1, T2.C2 .., WENN (T1.C3 <> T2.C3, "Geändert", "1") AS NewColumn .... Nur zur Verdeutlichung meine Abfrage .. –

+1

mögliche Duplikate von [Wie führst du ein IF ... DANN in einem SQL SELECT?] (http://stackoverflow.com/questions/63447/how-do-you-perform-an-if- then-in-a-sql-select) – Yuck

+0

Sie könnten eine UDF erstellen, um eine 'IIF'-Funktion (sofort if) auszuführen. Die meisten Menschen (86%) sind mit einem CASE-Ausdruck zufrieden. – HABO

Antwort

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

Danke eine Tonne Alex .. Das funktioniert .. –

5

In diesem Zusammenhang müssen Sie CASE WHEN verwenden.

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

Wenn Sie Bedingungsprüfungen innerhalb der Anweisung verwenden möchten, sollten Sie CASE WHEN

MSDN

Aber wenn Sie mehrzeilige Aussagen haben, können die Sie ELSE-Klausel IF

1

Andere haben bereits erwähnt, dass Sie CASE WHEN ELSE END verwenden sollten. Der Unterschied zwischen den beiden ist, dass IF den Ausführungsablauf Ihres Codes ändert - Sie können Code abhängig vom Ergebnis Ihrer IF-Anweisung bedingt ausführen. CASE ändert den Ausführungsfluss nicht - Sie können einfach einen Wert überprüfen und dann abhängig vom Ergebnis ein anderes Ergebnis erhalten.

+0

Vielen Dank für Ihre Kommentare. Ich habe das mit CASE ausgeführt –