2016-12-22 3 views
1

はIAM:case文を以下の表構造のためのCASE文を書こうとMySQLの

======================================== 
tender_cust_shortcode | open_auth_date 
======================================== 
HAL Hydera   | 24-01-2016 
DRDL     | NULL 
HAL ARDC    | 10-02-2016 
DLRL     | NULL 
ISAC     | NULL 
======================================== 

次のように私のCASE文は次のとおりです。

CASE WHEN (tender_cust_shortcode = 'HAL Hydera' OR 'HAL ARDC') THEN 'N/A' 
    WHEN (tender_cust_shortcode != 'HAL Hydera' OR 'HAL ARDC') AND open_auth_date IS NULL 
THEN 'Pending' 
ELSE 'Completed' END AS `Open Auth Status` 

基準は

1である)場合(tender_cust_shortcode = 'HAL Hydera' OR 'HAL ARDC')次に、 'N/A'として表示されます。

2)if(tender_cust_s hortcode!= 'HAL Hydera' OR 'HAL ARDC')そしてopen_auth_dateはNULLで、 '保留中'となるはずです。

3)それ以外の場合は 'Completed'です。

希望の出力が得られません。 ANDまたはOR条件の問題があります。誰でも私にこれを助けることができますか?

答えて

1

を使用してみてくださいIN、これが動作するかどうかは不明ですが、試してみてください:

ここ
CASE 
    WHEN tender_cust_shortcode IN ('HAL Hydera', 'HAL ARDC') THEN 'N/A' 
    WHEN tender_cust_shortcode NOT IN ('HAL Hydera', 'HAL ARDC') AND open_auth_date IS NULL THEN 'Pending' 
    ELSE 'Completed' 
END AS `Open Auth Status` 

SQLFiddle Demo、それが動作します。:-)

+0

素晴らしい。そのうまく動作します。どうもありがとうございます。 –

0

あなたは、列名とANDによって接続されたかunequals条件必見のrepeadする必要があります。

CASE WHEN (tender_cust_shortcode = 'HAL Hydera' OR tender_cust_shortcode = 'HAL ARDC') THEN 'N/A' 
    WHEN (tender_cust_shortcode != 'HAL Hydera' AND tender_cust_shortcode != 'HAL ARDC') AND open_auth_date IS NULL 
THEN 'Pending' 
ELSE 'Completed' END AS `Open Auth Status` 

SQLFiddle

+0

そのが表示されていない '保留中' です。ここでは、 'ISAC'はPendingです。しかし、上記のケース・ステートメントでは、「Completed」と表示されています。私は間違いを犯していますか? –

+0

@SanjuMenonあなたのケースでは 'open_auth_date'はnullではないかもしれませんか? – Jens

+0

かっこは必要ありません。 – axiac

-1

を参照してください。このようなクエリを試してみてください:

SELECT CASE WHEN (tender_cust_shortcode = 'HAL Hydera' OR 'HAL ARDC') THEN 'N/A' 
WHEN ((tender_cust_shortcode != 'HAL Hydera' OR 'HAL ARDC') AND (open_auth_date IS NULL)) THEN 'Pending' 
ELSE 'Completed' END FROM `test` 
+0

比較演算子( '=')は、「より高い優先順位」(http://dev.mysql.com/doc/refman/5.7/en/operator-precedence.html)よりも 'OR '。これは 'tender_cust_shortcode = 'HAL Hydera' OR 'HAL ARDC'は'(tender_cust_shortcode = 'HAL Hydera')OR 'HAL ARDC'と評価され、これはOPが必要とするものではありません。 – axiac

+0

@Avani。あなたの時間をありがとう。 –