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

时间:2011-02-10 11:44:03

标签: 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 

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

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

感谢任何建议!   - L

5 个答案:

答案 0 :(得分:23)

您可以使用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 ...

答案 1 :(得分: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 ...

答案 2 :(得分:3)

case when R1.Type is null then 'ND' else R1.Type end AS Referred_by_3

答案 3 :(得分:2)

您可以使用IsNull(column_expression,default_value)功能。

答案 4 :(得分:0)

为什么不在数据库表中的字段上定义默认值呢?记住,如果你需要所有记录都有这个值或者一个提交插入或删除,你永远不希望该值为null,你必须修复任何现有的空值,然后添加默认值并确保该字段设置为不允许空值。这种方法的优点是它确保无论数据如何输入系统,都将遵循规则。如果您只想在某些时候使用默认值,请在应用程序代码或存储过程中执行此操作。但是,如果该字段应该有alawys值,那么最好在数据库中进行以避免数据完整性问题。