2017-10-18 18 views
0

正しい結果をもたらす式は、Caseです。 「OR」条件を追加すると結果が変わります。OR条件付きのケース式

  1. なぜ「OR」を追加して結果が変わるのですか?

    私は "OR" ステートメントID 1はまだ "未割り当て" でなければなりません

Orを添加した声明

--OR (TABLEA.ROLE != 'RED' AND CCP.STATUS = 'Active' 
    --AND TO_CHAR(CCP.END_DATE,'MM/DD/YYYY') = '09/09/9000' 

全クエリ

SELECT 
    CASE 
    WHEN MAX(CASE WHEN TABLEA.ROLE = 'RED' 
         AND TABLEA.ID IS NULL 
         AND CCP.STATUS = 'Active') 
         --OR (TABLEA.ROLE != 'RED' AND CCP.STATUS = 'Active' 
           --AND TO_CHAR(CCP.END_DATE,'MM/DD/YYYY') = '09/09/9000') 
        THEN TABLEA.DT 
       END 
     ) KEEP (DENSE_RANK LAST ORDER BY TABLEA.HISTORYID DESC, 
        CASE WHEN TABLEA.ROLE = 'RED' 
         THEN TABLEA.DT 
        END ASC NULLS FIRST 
       ) OVER (PARTITION BY CCP.ID) IS NULL 
     THEN 'Unassigned' 
    --WHEN TABLEA.ROLE != 'RED' THEN 'Unassigned' 
    WHEN TO_CHAR(CCP.END_DATE,'MM/DD/YYYY') != '09/09/9000' 
     AND CCP.STATUS = 'Closed' 
     THEN 'Closed' 
    ELSE 'Assigned' 
    END AS CURRENT_STATUS2 
    FROM TABLEA 

結果を期待しますOR文なし:

ID CURRENT_STATUS2 
1  Unassigned 

OR文を使用して、結果は:未割り当て可能と読むこと

ID CURRENT_STATUS2 
1  Assigned 
+0

構文エラー... – jarlh

+0

はこれとそれまたはこれが(この及びその)または(本)右@jarlh – Twelfth

+0

異なっている...操作やごブラケットの順番を覚えておいてください。 OR文を構文に正しく追加する方法はありますか? –

答えて

0

ない簡単なコードが割り当てられてはいけません。私はあなただけのカップル離れブラケットていると思う:これとそれまたはこれが(この及びその)または(本)と異なっている(上記のコメントから)順番を覚えて

WHEN (TABLEA.ROLE = 'RED' 
AND TABLEA.ID IS NULL 
AND CCP.STATUS = 'Active') 
OR (TABLEA.ROLE != 'RED' AND CCP.STATUS = 'Active' 
AND TO_CHAR(CCP.END_DATE,'MM/DD/YYYY') = '09/09/9000') 
1

クエリは次のようになります。

CASE 
WHEN MAX(CASE WHEN (TABLEA.ROLE = 'RED' 
    AND TABLEA.ID IS NULL 
    AND CCP.STATUS = 'Active') 
    OR(HIST.ROLE != 'RED' AND CCP.STATUS = 'Active' 
    AND TO_CHAR(CCP.END_DATE,'MM/DD/YYYY') = '01/01/3000') 
+0

Oracleのdocs [Operator Precedence](https://docs.oracle.com/cd/E17952_01/mysql-5.5-en/operator-precedence.html)によると、「OR」の方が「AND」よりも優先順位が低くなっています。したがって、あなたの声明は偽です。 –

+0

@ OlivierJacot-Descombes、はい、私はまだ間違った結果を得ていることに気付きます。だから、おそらく注文を元に戻すのが助かるかもしれない? –

+0

@ OlivierJacot-DescombesまたはおそらくMAXの文章が問題を引き起こしています。わからない –