我在“ application_form ”表格中有这些数据,我在根据class1_status
和class2_status
列获取值时遇到了问题。
以前客户端要求是显示数据表中存在的值的所有数据。
现在,需求略有变化,他们想要
class1_update_date
值仅在class1_status
为“completed
”且null
为其余状态时才会显示。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
我也在尝试和搜索问题,但也无法开始。
感谢任何答案/提示。
答案 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