基于另一列值的列值

时间:2016-02-09 12:49:04

标签: mysql mysqli

我在“ application_form ”表格中有这些数据,我在根据class1_statusclass2_status列获取值时遇到了问题。 以前客户端要求是显示数据表中存在的值的所有数据。

现在,需求略有变化,他们想要

  1. class1_update_date值仅在class1_status为“completed”且null为其余状态时才会显示。
  2. class2_update_date值仅在class2_status为“completed”且null为其余状态时才会显示。
  3. 这是我的表格结构。数据是假的。

    Sno | class1_update_date | class2_update_date | class1_status | class2_status
    1       10-01-2004              10-01-2006      completed       pending
    2       10-01-2004              10-01-2006      pending         pending
    3       10-01-2004              10-01-2006      in progress     pending 
    4       10-01-2004              10-01-2006      pending         pending
    5       10-01-2004              10-01-2006      pending         pending
    6       10-01-2004              10-01-2006      in progress     pending         
    7       10-01-2004              10-01-2006      completed       completed
    8       10-01-2004              10-01-2006      in progress     pending         
    9       10-01-2004              10-01-2006      completed       completed
    10      10-01-2004              10-01-2006      in progress     pending     
    

    这是一个简单的查询,之前写过。现在,我没有得到代替列名的条件来获得所需的输出。

        SELECT class1_update_date, class2_update_date, class1_status, class2_status 
        FROM application_form;
    

    因为,我不太擅长SQL查询。所以,我想问一下有关这种情况的问题。

    预期输出。

    Sno | class1_update_date | class2_update_date | class1_status | class2_status
    1      10-01-2004                               completed       pending
    2                                               pending         pending
    3                                               in progress     pending 
    4                                               pending         pending
    5                                               pending         pending
    6                                               in progress     pending         
    7       10-01-2004          10-01-2006          completed       completed
    8                                               in progress     pending         
    9       10-01-2004          10-01-2006          completed       completed
    10                                              in progress     pending     
    

    我也在尝试和搜索问题,但也无法开始。

    感谢任何答案/提示。

2 个答案:

答案 0 :(得分:1)

尝试使用case语句,如下所示:

SELECT case when class1_status = 'completed' then class1_update_date else null end as class1_update_date,
       case when class2_status = 'completed' then class2_update_date else null end as class2_update_date,
       class1_status, class2_status 
FROM application_form

由于您要选择所有记录,因此您不需要任何条件,case语句检查状态已完成,而不是放置值,如果未放入null

答案 1 :(得分:-1)

尝试使用MySQL的if函数:

select
    if (class1_status = 'completed', class1_update_date, null) as class1_update_date
    , if (class2_status = 'completed', class2_update_date, null) as class2_update_date
    , class1_status
    , class2_status
from application_form