-1

下面是我的带有 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”。

我尝试了几种不同的组合,但不知何故它没有执行。

4

3 回答 3

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.

另请注意:

  • 我修复了表格别名,使其有意义(作为表格缩写)而不是任意字母。
  • 我更改了列别名,因此返回的两列不同。
  • 我删除了列别名周围的单引号。仅对字符串和日期常量使用单引号。
于 2019-02-02T16:55:20.390 回答
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
于 2019-02-02T16:55:38.503 回答
0

CASE [value] WHEN NULL THEN END永远不会评估为真。您将不得不使用CASE WHEN [value] IS NULL THEN 1 END.

对于你所拥有的,我会使用:

ISNULL(NULLIF(AssociationClubNumber,'')'NA')
于 2019-02-02T16:56:15.783 回答