嵌套查询返回NULL(t的值),但是我想返回0而不是NULL,所以我添加了大小写条件。但此查询仍返回NULL
select case when t.a is NULL then 0 else t.a end
from
(select QTIB_REQ_ as a from qb_requisitions_all
where QTIB_REQ_ IN ($Req_disabled_WA)
and CLIENT___BENCH___NON_BILLABLE IN ( 'Non Billable', 'Non-Billable', 'NonBillable')
and DATEDIFF(CURDATE(),TARGET_FILL_DATE)<30
and DATEDIFF(CURDATE(),TARGET_FILL_DATE)>0) as t
答案 0 :(得分:0)
IFNULL()
函数使您可以在表达式为NULL
的情况下返回替代值。试试这个:
select IFNULL(QTIB_REQ_, 0) as a from qb_requisitions_all
where QTIB_REQ_ IN ($Req_disabled_WA)
and CLIENT___BENCH___NON_BILLABLE IN ( 'Non Billable', 'Non-Billable', 'NonBillable')
and DATEDIFF(CURDATE(),TARGET_FILL_DATE)<30
and DATEDIFF(CURDATE(),TARGET_FILL_DATE)>0
答案 1 :(得分:0)
您的子查询不能为NULL
返回t.a
。为什么不?因为您有以下条件:
QTIB_REQ_ IN ($Req_disabled_WA)
您要返回QTIB_REQ_
的值,而NULL
的值不能满足此条件。
我可以想到两种可能性。也许您的意思是'NULL'
,而不是NULL
。如果是这样,则逻辑应为:
select (case when t.a is NULL or t.a = 'NULL' then '0 'else t.a end)
但是,这似乎不太可能,因为0
表示该值是一个数字。
或者,您确实有一个相关的子查询,但是针对问题将其“简化”了。所以你真的有:
select (select QTIB_REQ_ as a
from qb_requisitions_all
where QTIB_REQ_ IN ($Req_disabled_WA) and
CLIENT___BENCH___NON_BILLABLE IN ( 'Non Billable', 'Non-Billable', 'NonBillable') and
DATEDIFF(CURDATE(),TARGET_FILL_DATE) < 30 and
DATEDIFF(CURDATE(),TARGET_FILL_DATE) > 0
)
如果是这种情况,则您的问题是子查询没有返回任何行,因此该值被解释为NULL
。您可以使用COALESCE()
或使用聚合和COALESCE()
来解决此问题。因为这最多应该返回一行,所以我会寻求:
select (select coalesce(max(QTIB_REQ_), 0)
from qb_requisitions_all
where QTIB_REQ_ IN ($Req_disabled_WA) and
CLIENT___BENCH___NON_BILLABLE IN ( 'Non Billable', 'Non-Billable', 'NonBillable') and
DATEDIFF(CURDATE(),TARGET_FILL_DATE) < 30 and
DATEDIFF(CURDATE(),TARGET_FILL_DATE) > 0
)