陈述没有给出预期结果的情况

时间:2018-08-06 07:10:57

标签: sql-server null case

我正在尝试执行以下查询。

Select distinct 
              Case 
              WHEN S.FileStatusIdentifier = 'Invalid'   Then  'Invalid(file<300KB)'
              WHEN S.FileStatusIdentifier = 'NotFound' Then 'NotFound'
              WHEN F.FileDataOID IS Null THEN 'NoFileData'
              END AS FileStatusIdentifier 
              from FileState S
                           Inner Join FileData F ON F.FileDataOID = S.FileDataOID

但是当我执行查询时,它给出的结果如下。

FilestatusIdentifier 空值 无效(文件<300KB) 未找到

无论filedataoid为null,它都应将输出表示为'NoFileData'。但是正在获取NULL。有人可以帮助我了解查询的问题吗?

2 个答案:

答案 0 :(得分:1)

您没有检查FileStatusIdentifier是否为null。您的行已通过所有这些检查。您上一次对FileDatOID为null的检查将永远不会找到,因为您的内部联接将排除该检查。如果要检查,则内部联接应该是左联接。而且我还要添加

when s.FileStatusIdentifier is null then 'NullIdentifier'
else s.FileStatusIdentifier
end

捕获标识符为null但ID不为null的行。

答案 1 :(得分:0)

这意味着没有一个条件无效。 因此,您可以添加else。如果所有其他条件评估为 FALSE ,则else_expression将返回。

Select distinct 
              Case 
              WHEN S.FileStatusIdentifier = 'Invalid'   Then  'Invalid(file<300KB)'
              WHEN S.FileStatusIdentifier = 'NotFound' Then 'NotFound'
              WHEN F.FileDataOID IS Null THEN 'NoFileData'
              ELSE <else_expression>
              END AS FileStatusIdentifier 
              from FileState S
                           Inner Join FileData F ON F.FileDataOID = S.FileDataOID