SQL中的Select查询中的情况

时间:2019-02-02 16:53:36

标签: sql sql-server case-statement

下面是我的带有case语句的SQL。

select 
    a.AssociationClubNumber,
    case a.AssociationClubNumber
        when NULL then 'NA'
        when '' then 'NA'
        else a.AssociationClubNumber
    end as 'AssociationClubNumber'
from 
    [dbo].[Customer] a

如果a.AssociationClubNumberNULL"",则CASE应该返回字符串 “NA”。

我尝试了几种不同的组合,但是以某种方式无法执行。

3 个答案:

答案 0 :(得分:1)

使用case的另一种形式-进行显式比较:

select c.AssociationClubNumber,
       (case when c.AssociationClubNumber is null or 
                  c.AssociationClubNumber = ''
             then 'NA'
             else c.AssociationClubNumber
        end)  as new_AssociationClubNumber
from [dbo].[Customer] c;

您正在使用简单的case。即使以简单的形式,NULL也无法匹配-基本上是因为=NULL不兼容。

也请注意:

  • 我固定表的别名是很有意义(作为表缩写),而不是任意的字母。
  • 我更改了列别名,以便返回的两列不同。
  • 我删除了列别名周围的单引号。仅对字符串和日期常量使用单引号。

答案 1 :(得分:0)

从别名中删除单引号,然后使用is null

 select a.AssociationClubNumber,
    Case a.AssociationClubNumber
    When is NULL THEN  'NA'  
    WHEN  '' then  'NA'
    ELSE a.AssociationClubNumber
    END  as AssociationClubNumber_val
    from [dbo].[Customer] a

答案 2 :(得分:0)

CASE [value] WHEN NULL THEN END永远不会评估为true。您将必须使用CASE WHEN [value] IS NULL THEN 1 END

尽管如此,我会使用:

ISNULL(NULLIF(AssociationClubNumber,'')'NA')