2016-08-09 13 views
0

私はこのクエリを使用して、まだ支払われていない顧客からの支払いを取得しています。ですから、where句ですべての種類を除外する必要があります。私は<と一緒に試してみました!と=好きではありませんが、私はwhere句で除外したものでもすべての支払いを表示します。私には見えないものがありますか?奇妙な結果があります

SELECT td= CODCLIFOR,  '', 
      td= DSCCONTO1,  '', 
      td= ANAGRAFICACF.TELEX,  '', 
      td= NUMDOC,  '', 
      td= NUMSCAD,  '', 
      td= CONVERT (VARCHAR(30),DATASCADENZA,105),  '', 
      td= '€ ' + REPLACE(CONVERT(varchar, CAST(IMPORTOSCLIT AS money), 105),',','.') ,  '', 
      td= TIPIEFFETTI.DESCRIZIONE,ESITO 
      FROM dbo.TABSCADENZE 
      INNER JOIN dbo.ANAGRAFICACF ON CODCLIFOR = CODCONTO 
      INNER JOIN dbo.TIPIEFFETTI ON TIPOEFFETTO = EFFETTO 
      INNER JOIN dbo.BANCAAPPCF ON CODCLIFOR = BANCAAPPCF.CODCONTO AND BANCAAPPCF.CODICE = TABSCADENZE.BANCAAPPOGGIO 
      INNER JOIN dbo.ANAGRAFICABANCHE ON BANCAINC = CODBANCA 
      WHERE (TABSCADENZE.TIPOEFFETTO NOT LIKE '%2%' OR TABSCADENZE.TIPOEFFETTO NOT LIKE '%10%') AND (TABSCADENZE.ESITO NOT LIKE '%1%' OR TABSCADENZE.ESITO NOT LIKE '%2%' OR TABSCADENZE.ESITO NOT LIKE '%4%') AND CODCLIFOR LIKE '%C%' 
      ORDER BY CODCLIFOR DESC 

ありがとうございます!

+0

サンプルデータとそのデータから取得する出力を含めるには[編集]してください。あなたの質問から明らかな唯一のことは、データベース設計が非常に悪いように見えることです。 –

答えて

0

これは、ORsANDsの組み合わせで、紛らわしくて間違っているNOTを使用しています。

ほとんどの人が誤って正しいロジックをコーディングしていると思うので、英語のように読んではいけません。

NOTをORに使用する場合は、その逆を実行してANDをANDに置き換える必要があります。さもなければ、1つは失敗しますが、もう1つは合格します。したがって、WHERE全体がTRUEになり、すべてのレコードが表示されます。

はこれを試してみてください...

WHERE 
    TABSCADENZE.TIPOEFFETTO NOT LIKE '%2%' 
AND TABSCADENZE.TIPOEFFETTO NOT LIKE '%10%' 
AND TABSCADENZE.ESITO NOT LIKE '%1%' 
AND TABSCADENZE.ESITO NOT LIKE '%2%' 
AND TABSCADENZE.ESITO NOT LIKE '%4%' 
AND CODCLIFOR LIKE '%C%' 

は、私は解決策を見つけた

How do I add multiple "NOT LIKE '%?%' in the WHERE clause of sqlite3 in python code?

+1

mmm私はそれが正しいと確信していません。今私は結果がありません。 「ESITO」は、1または2または4、または3つの値を同時に設定することはできません。そのため、結果は常に空であると思います。そして同じことが 'TIPOEFFETTO'のためです – BigBlack

0

[OK]を...似ている、このを見てください。私はサブクエリでNot Inを使用しました。今、結果は良いです。これはコードが必要な場合です:

WHERE DATASCADENZA BETWEEN DATEADD(DAY, -30, GETDATE()) AND DATEADD(DAY, -15, GETDATE()) AND CODCLIFOR LIKE '%C%' 
       AND TIPOEFFETTO NOT IN (SELECT DISTINCT TIPOEFFETTO FROM dbo.TABSCADENZE WHERE TIPOEFFETTO = 10 OR TIPOEFFETTO = 2) AND ESITO NOT IN (SELECT DISTINCT ESITO FROM dbo.TABSCADENZE WHERE ESITO = 1 OR ESITO = 2 OR ESITO = 4) 

ありがとうございました!

+0

あなたが達成したものが100%ではなかったとしても、答えにポイントを与えるのは、通常は良いコミュニティエトスです。 – Fandango68