我有一个看起来很简单的问题,但由于某种原因,我无法从打击选择中删除空值。我需要做的就是返回一行,即没有 NULL 值的行。有人可以指出我的方法中的错误吗? :)
我运行时得到的结果:
EffectiveDate Refund
2015-05-18 00:00:00.000 NULL
2015-05-18 00:00:00.000 1
我期望得到的返回:
EffectiveDate Refund
2015-05-18 00:00:00.000 1
我的查询:
select md.EffectiveDate,
CASE
WHEN
ISNULL(ConfigID,'') = 3 THEN '1'
WHEN
ISNULL(ConfigID,'') = 4 THEN '2'
END AS Refund
from dbo.PartnerBankConfig md
where md.PartnerID= 100000509
and md.EffectiveDate = (select max(EffectiveDate)
from dbo.PartnerBankConfig
where PartnerID = 100000509
and ISNULL(ConfigID,'') IS NOT NULL)
最佳答案
您得到此 null 是因为数据与 case 语句中的任何条件都不匹配。换句话说,在该行中,您的 ConfigID 值既不是 3 也不是 4。该行为当没有任何条件匹配时,case 语句的计算结果为 null,因此该行将返回 null。
此外,此函数:ISNULL(ConfigID,'')
将任何 null 替换为空字符串(非空值)。
因此,ISNULL(ConfigID,'') IS NOT NULL
没有意义。它始终为 true,因为 ISNULL 始终返回非空值。您应该从查询中删除所有对 ISNULL()
的使用,因为它们都不是必需的。
关于sql - 删除这些该死的 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43806442/