2016-02-09 215 views
0

我在我的表'application_form'中有这个数据,我在根据class1_statusclass2_status列获取值时遇到问题。 以前的客户需求是用数据表中的值显示所有的数据。基于另一列值的列值

现在,需求略有改变,他们希望

  1. class1_update_date值只有class1_status是“completed”和null的状态休息。
  2. class2_update_date只有在class2_status为'completed'和null的值为其余状态。

这是我的表格结构。数据是虚拟的。

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  

我正在尝试搜索问题,但也无法启动。

任何答案/提示表示赞赏。

回答

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

+0

哇。 *有效*。谢谢你那么多Sagi。 ':D' –

-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