为什么这个CASE语句给出了NULLS而不是ELSE条件?

时间:2016-07-11 14:47:43

标签: sql sql-server case

我正在运行SQL Server 2014,并且我有以下T-SQL查询:

SELECT   a.ResaID, 
            b.[Market Final],
          (CASE 
              WHEN  b.[Market FINAL] = 'Overbooking' AND b.[TAPRofileID3] IS NOT NULL   
              THEN   b.[Overbooking Market Classification]
                ELSE  b.[Market FINAL]
            END) AS 'Market Re-Classified'

当我运行此查询时,我得到以下输出:

ResaID    Market Final     Market Re-Classified
 102      Overbooking       NULL
 251      Overbooking       France
 680      Overbooking       Germany

我无法理解为什么我的ResaID 102为NULL。我期待" Overbooking"因为我的ELSE条件的输出声明如果TAProfileID3为NULL,那么它应该返回市场决赛。

如何重新编写代码以维护此逻辑?

3 个答案:

答案 0 :(得分:1)

THEN   b.[Overbooking Market Classification]  

或     WHEN b.[Market FINAL] = 'Overbooking' AND b.[TAPRofileID3] IS NOT NULL

失败并b.[Market FINAL]

可以包含null

并且对于这些列,您可以使用

 coalesce(youcolumn, 'your_default_value');

答案 1 :(得分:0)

很可能b。[超额预订市场分类]为空。我之前有过这个问题,只需按照TAPR的相同方式添加它,应该是好的。你正在使用3个字段,只检查2是否为空。

答案 2 :(得分:0)

我之前遇到过Null这个词被放入字段的地方,并且在检查空值方面根本不是NULL。通过查询来检查您的记录:

select * from tableb where resaid = 102 and [market re-classified] = 'null'