2012-03-30 13 views
0
SELECT * 
FROM T1 INNER JOIN T2 ON T1.C1 = T2.C1 
WHERE 
((T1.C3-T2.C3<>0) 
And (CASE WHEN T1.C4 <> T2.C4 THEN 'Changed' END)) 
OR 
((T1.C5-T2.C5<>0) 
And (T1.C6-T2.C6<>0)) 

- >SQL Server 2005およびまたは

条件が「)」、近くに期待されているコンテキストで指定された非ブール型の式。

このステートメントには何が問題なのですか?

+0

溶液である - > SELECT * T1 INNER FROM ((T1 T1.C1 = T2.C1 ON T2をJOIN (T1.C5-T2.C5 <> 0) および(T1 .C4-T2.C5 <0)(T1.C5-T2.C5 <> 0).C6-T2.C6 <> 0)) –

答えて

0

case節をwere節で見ると、case文はどの値とも比較されません。

caseステートメントをselectステートメントに移動するか、caseステートメントと比較する値があることを確認することをお勧めします。

すなわち:where句で

declare @Changed nvarchar(50) = 'Changed' 

@Changed = (CASE WHEN T1.C4 <> T2.C4 THEN 'Changed' END)) 
+0

私のSELECTステートメントでは、別の列にこのCASE比較を保存しています。ステートメントはSELECT T1。*です。T1.C4 <> T2.C4 THEN '変更されました。私はこの比較を行い、比較を '変更されました'として保存しなければなりません –

+0

はそれを得ました。 ANDと書く(T1.C4 <> T2.C4 THEN 1 END)= 1私はそれを解決すべきだと思う。 –

+0

@rahul shuklaは本当に私があなたと何を意味するものなのか何かと比較しなければなりません。 – Lex

4

これはおそらく原因です:

And (CASE WHEN T1.C4 <> T2.C4 THEN 'Changed' END)) 

あなたはブール値ではありませんChangedを返すことができます何かにANDを行っています。

+0

thats dumb !!私はそれを盲目的に私のクエリのselect文からコピーしました..ありがとう!! –

関連する問題