2017-12-27 12 views
0

私持っている条件はどこ最後を除いて、動作しているようだ次のクエリ、:SAP B1のHANAクエリ - 条件が機能していない

WHERE 
    ((T2."WhsCode" = ('03') OR T2."WhsCode" = ('33')) 

    AND 

    ((T1."WhsCode" <> ('03') OR T1."WhsCode" <> ('33')) 

    OR 

    T0."DocNum" IS NULL)) 

第二の部分を考慮に入れていないようです(ANDの後)。誰かが私が間違っているのを見ることができますか?

完全なコード怒鳴る:

SELECT DISTINCT T0."DocNum" AS "QUOT DocNum", T0."CANCELED" AS "QUOT Canc", T3."DocNum" AS "OC DocNum", T3."CANCELED" AS "OC Canc", T5."DocNum" AS "RECP DocNum", T5."CANCELED" AS "RECP Canc", T0."DocDate" AS "Env Date", T0."ReqDate" AS "Lev Date", T3."DocDate" AS "OC Date", T5."DocDate" AS "Recp Date", T1."LineNum", CONCAT(REPLACE(T1."ItemCode",'.','_'),'_') AS SKU, T1."ItemCode", T1."WhsCode", T2."LineNum", CONCAT(REPLACE(T2."ItemCode",'.','_'),'_') AS SKU, T2."ItemCode", T2."WhsCode", T1."PQTReqQty" AS "Qtt_Pedida", T1."Quantity" AS "Qtt_Env", T2."Quantity" AS "Qtt_OC", T4."Quantity" AS "Qtt_Rec", CASE WHEN (CASE WHEN ((WEEKDAY(ADD_DAYS(T0."ReqDate",2))=5) OR (WEEKDAY(ADD_DAYS(T0."ReqDate",2))=6)) THEN ADD_DAYS(T0."ReqDate",4) ELSE ADD_DAYS(T0."ReqDate",2) END)>=CURRENT_DATE THEN 'TRUE' ELSE 'FALSE' END AS "Aft_Tdy", CASE WHEN (T0."CANCELED"='N' OR T0."CANCELED" IS NULL) AND (T3."CANCELED"='N' OR T3."CANCELED" IS NULL) AND (T5."CANCELED" IS NULL OR T5."CANCELED"='N') THEN 'TRUE' ELSE 'FALSE' END AS "Consid" 

FROM OPQT T0 LEFT JOIN PQT1 T1 ON T0."DocEntry" = T1."DocEntry" LEFT JOIN POR1 T2 ON T1."TrgetEntry"= T2."DocEntry" AND T1."LineNum"=T2."BaseLine" LEFT JOIN OPOR T3 ON T2."DocEntry" = T3."DocEntry" LEFT JOIN PDN1 T4 ON T2."LineNum"=T4."BaseLine" AND T2."DocEntry"=T4."BaseEntry" LEFT JOIN OPDN T5 ON T4."DocEntry" = T5."DocEntry" WHERE (T1."WhsCode"='03' OR T1."WhsCode"='33') 

UNION ALL 

SELECT DISTINCT T0."DocNum" AS "QUOT DocNum", T0."CANCELED" AS "QUOT Canc", T3."DocNum" AS "OC DocNum", T3."CANCELED" AS "OC Canc", T5."DocNum" AS "RECP DocNum", T5."CANCELED" AS "RECP Canc", T0."DocDate" AS "Env Date", T0."ReqDate" AS "Lev Date", T3."DocDate" AS "OC Date", T5."DocDate" AS "Recp Date", T1."LineNum", CONCAT(REPLACE(T1."ItemCode",'.','_'),'_') AS SKU, T1."ItemCode", T1."WhsCode", T2."LineNum", CONCAT(REPLACE(T2."ItemCode",'.','_'),'_') AS SKU, T2."ItemCode", T2."WhsCode", T1."PQTReqQty" AS "Qtt_Pedida", T1."Quantity" AS "Qtt_Env", T2."Quantity" AS "Qtt_OC", T4."Quantity" AS "Qtt_Rec", CASE WHEN (CASE WHEN ((WEEKDAY(ADD_DAYS(T0."ReqDate",2))=5) OR (WEEKDAY(ADD_DAYS(T0."ReqDate",2))=6)) THEN ADD_DAYS(T0."ReqDate",4) ELSE ADD_DAYS(T0."ReqDate",2) END)>=CURRENT_DATE THEN 'TRUE' ELSE 'FALSE' END AS "Aft_Tdy", CASE WHEN (T0."CANCELED"='N' OR T0."CANCELED" IS NULL) AND (T3."CANCELED"='N' OR T3."CANCELED" IS NULL) AND (T5."CANCELED" IS NULL OR T5."CANCELED"='N') THEN 'TRUE' ELSE 'FALSE' END AS "Consid" 

FROM OPOR T3 LEFT JOIN POR1 T2 ON T2."DocEntry" = T3."DocEntry" LEFT JOIN PQT1 T1 ON T1."TrgetEntry"= T2."DocEntry" AND T1."LineNum"=T2."BaseLine" LEFT JOIN OPQT T0 ON T0."DocEntry" = T1."DocEntry" LEFT JOIN PDN1 T4 ON T2."LineNum"=T4."BaseLine" AND T2."DocEntry"=T4."BaseEntry" LEFT JOIN OPDN T5 ON T4."DocEntry" = T5."DocEntry" WHERE ((T2."WhsCode" = ('03') OR T2."WhsCode" = ('33')) AND ((T1."WhsCode" <> ('03') OR T1."WhsCode" <> ('33')) OR T0."DocNum" IS NULL)) 
+0

SAPテーブルでは、ネイティブHANAデータベーステーブルとしてNULLがないことがわかります。 DocNum = ''やDocNum = ''などのNULLの代わりに空の文字列をチェックしようとしましたか? – Eralper

+0

こんにちは@Eralper、いいえ、私はそれを知らなかった(私はSAPを使っているので、私は一緒に勉強している)私は私の質問を再整理し、結果を掲載するつもりです。ありがとう – BrunoR

+0

実際に試してみるにはちょうど時間があった、私はまったく同じ結果を得る。私は穴のクエリの完全性について疑問に思っています – BrunoR

答えて

0

ロジックを使用すると、構文を変更する場合は理解しやすいかもしれません。

あなたの文では、同一の

where 
    T2."WhsCode" in ('03','33') 
and 
    ( T1."WhsCode" not in ('03','33') 
    or T0."DocNum" IS NULL 
    ) 

にたぶん、このロジックは、あなたが望むものではありませんか?

関連する問題