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))
条件が「)」、近くに期待されているコンテキストで指定された非ブール型の式。
このステートメントには何が問題なのですか?
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))
条件が「)」、近くに期待されているコンテキストで指定された非ブール型の式。
このステートメントには何が問題なのですか?
case節をwere節で見ると、case文はどの値とも比較されません。
caseステートメントをselectステートメントに移動するか、caseステートメントと比較する値があることを確認することをお勧めします。
すなわち:where句で
declare @Changed nvarchar(50) = 'Changed'
:
@Changed = (CASE WHEN T1.C4 <> T2.C4 THEN 'Changed' END))
私のSELECTステートメントでは、別の列にこのCASE比較を保存しています。ステートメントはSELECT T1。*です。T1.C4 <> T2.C4 THEN '変更されました。私はこの比較を行い、比較を '変更されました'として保存しなければなりません –
はそれを得ました。 ANDと書く(T1.C4 <> T2.C4 THEN 1 END)= 1私はそれを解決すべきだと思う。 –
@rahul shuklaは本当に私があなたと何を意味するものなのか何かと比較しなければなりません。 – Lex
これはおそらく原因です:
And (CASE WHEN T1.C4 <> T2.C4 THEN 'Changed' END))
あなたはブール値ではありませんChanged
を返すことができます何かにAND
を行っています。
thats dumb !!私はそれを盲目的に私のクエリのselect文からコピーしました..ありがとう!! –
溶液である - > 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)) –