SQL视图 - 如果为null,则添加默认值?

lau*_*ura 14 sql sql-server sql-server-2005

我正在生成一个视图,如果它们为null,我想用预定义的值填充单元格.

视图的选择是:

SELECT a_case.Id, 
    R1.Type AS Referred_by_1,
    R1.Type AS Referred_by_2,
    R1.Type AS Referred_by_3
FROM dbo.CaseInfo a_case LEFT JOIN
    dbo.Referrer R1 ON P.Id = R1.Case_Id AND R1.Seq = 1 LEFT JOIN
    dbo.Referrer R2 ON P.Id = R2.Case_Id AND R2.Seq = 2 LEFT JOIN
    dbo.Referrer R3 ON P.Id = R3.Case_Id AND R3.Seq = 3 
Run Code Online (Sandbox Code Playgroud)

引用者是可选的,如果没有指定,我需要用'ND'填充该字段.

我想我可能应该使用CASE WHEN,但我不确定如何将其整合到现有的选择中......

任何建议都感激不尽! - L.

Kla*_*sen 24

你可以使用ISNULL:

SELECT a_case.Id,      
    ISNULL(R1.Type, 'ND') AS Referred_by_1,     
    ISNULL(R2.Type, 'ND') AS Referred_by_2,     
    ISNULL(R3.Type, 'ND') AS Referred_by_3 
FROM ...
Run Code Online (Sandbox Code Playgroud)

  • @Lainie - 你应该知道ISNULL是SQL Server方言 - 如果你曾经在不同的数据库系统上工作,它就不会存在.COALESCE是标准的(扩展到2个以上的参数,获取数据类型正确等) (5认同)
  • MySql还支持@Damien_The_Unbeliever`ISNULL`。Oracle的等效项是“ NVL”,而SqlLite的等效项是“ IFNULL”。您正确地认为“ COALESCE”是标准的,也可以使用。`COALESCE`还支持多个参数来检查null,因此它更强大。 (2认同)

one*_*hen 21

使用COALESCE例如

SELECT a_case.Id, 
       COALESCE(R1.Type, 'ND') AS Referred_by_1,
       COALESCE(R2.Type, 'ND') AS Referred_by_3,
       COALESCE(R3.Type, 'ND') AS Referred_by_3
  FROM ...
Run Code Online (Sandbox Code Playgroud)