2016-12-22 27 views
1

荫尝试写为下面的表结构的CASE语句:如果Case语句的MySql

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 | open_auth_date 
======================================== 
HAL Hydera   | 24-01-2016 
DRDL     | NULL 
HAL ARDC    | 10-02-2016 
DLRL     | NULL 
ISAC     | NULL 
======================================== 

我的CASE语句如下(tender_cust_shortcode ='HAL Hydera'或'HAL ARDC')那么它应该是'不适用' hortcode!='HAL Hydera'或'HAL ARDC')并且open_auth_date IS NULL,那么它应该导致为'Pending'

3)Else'Completed'。

Iam没有得到所需的输出。可能是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

你必须repead列名,或不平等的条件必须由AND连接:

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'是待定。但根据上面显示的“已完成”的情况说明。我犯了什么错误吗? –

+0

@SanjuMenon在你的情况下''open_auth_date'是否为空? – 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) '。这意味着'tender_cust_shortcode ='HAL Hydera'或'HAL ARDC'被评估为'(tender_cust_shortcode ='HAL Hydera')或'HAL ARDC',这不是OP所需要的。 – axiac

+0

@Avani。感谢您的时间。 –