2012-04-24 12 views
1

は私が化合物条件文、すなわちを考慮することが私のクエリを調整しようとしていますレポート:最初の問題はクリスタルがその文を取り、外括弧を削除するというものであった私のクリスタルで複合条件を使用すると、SQLクエリ

({tablea.fielda} <> 5566 And Not ({tablea.fieldb} like '%889009%)) 

ステートメントを互いに独立して実行することができます。私はそうのように、「NOT」文と条件を逆にして文全体を置くことによって修正を持っていたと思った:

Not ({tablea.fielda} = 5566 And ({tablea.fieldb} like '%889009%)) 

クリスタルは、条件を逆にしてグループ化された条件を維持しましたが、それが今の中心を変えていますandからorへ。

これは自分の時間の前に作成されたレポートであり、変更しているだけなので、ビューやストアドプロシージャを作成してレポートのすべてのフィールドを変更する必要はありません。何か案は?

+0

私は、「互いに独立してステートメントを実行する」という意味を理解していません。外かっこを削除すると何が問題になりますか?何が問題なのですか? – Ryan

+0

「5566」とコード化された項目には「889009」コードが添付されていますが、その逆もあります。レポートから除外する必要がある項目は、「5566」コードと「 889009 "コードが添付されています。したがって、クリスタルがこれらのラインを別のラインから分離して実行する場合、クリエイティブが "889009"としてコード化されているかどうかにかかわらず、すべての "5566"コードが除外されます。泥のようにクリア? :) –

+1

@EdwardLane:元の条件(すなわち、上記の最初のコードスニペット)は、 "889009"のようなfieldbも持っていたかどうかに関係なく、 "5566"レコード*を除外します。 –

答えて

2

2番目のコードスニペットは、これを処理する正しい方法の1つです。

Not ({tablea.fielda} = 5566 And ({tablea.fieldb} like '%889009%))

クリスタルはただDe Morgan's Lawを通じて声明を低減します。

{tablea.fielda}<>5566 or {tablea.fieldb} not like '%889009%

ロジックは同等です。

+0

論理は等価ではありません。 "or"は、ステートメント全体が真であるか真であるかのどちらかの条件が真であることを示します。どちらの条件も満たされている必要があります他の項目は、これらのコードを別々に使用してレポートにとどまる必要があります。それは、文全体が真であれば、その項目がレポートから削除されるように、一緒に評価する必要がある複合条件です。 –

+0

あなたは何を知っています、私はもう一度それを見て、私は混乱していたので、混乱があった理由を見ることができます。笑。私はモノがあり、私は思った以上に私に影響を与えると思う。すべてが良いです、私は馬鹿だと私に説明する時間がかかった皆さんに感謝します。笑 –

関連する問題