我有一个看起来很简单的问题,但由于某种原因,我无法从打击选择中摆脱我的空值。我需要做的就是返回一行,那一行没有 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,'') 用空字符串(非空值)替换任何空值。

因此,ISNULL(ConfigID,'') IS NOT NULL 没有意义。它总是会是真的,因为 ISNULL 总是返回一个非空值。您应该从查询中删除对 ISNULL() 的所有使用,因为它们都不是必需的。

关于sql - 删除这些该死的 NULLS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43806442/

10-11 21:56