SQL视图-如果为空,是否添加默认值?
我正在生成一个视图,如果单元格为空,我想用预定义的值填充单元格 为视图选择的选项为:SQL视图-如果为空,是否添加默认值?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我正在生成一个视图,如果单元格为空,我想用预定义的值填充单元格 为视图选择的选项为: 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 JOI
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
referer是可选的,如果没有指定,我需要用“ND”填充字段
我想我可能应该在什么时候使用CASE,但我不确定如何将其集成到现有的select中
感谢您的建议!
-L您可以使用:
您可以使用IsNull(列表达式,默认值)
函数。使用例如
case when R1.Type is null then 'ND' else R1.Type end AS Referred_by_3
为什么不在数据库表中的字段上定义一个默认值呢?请记住,如果您需要所有记录在插入或删除中具有此值或一个提交的值,并且您永远不希望该值为空,则必须修复任何现有的空值,然后添加默认值,并确保该字段设置为不允许空值。这种方法的优点是,无论数据如何输入系统,都可以确保遵守规则。如果您只想在某些时候使用默认值,请在应用程序代码或存储过程中使用。但是,如果字段alawys应该有一个值,最好在数据库中这样做,以避免数据完整性问题。为什么要使用case语句而不是ISNULL或COALESCE?@Lainie-您应该知道ISNULL是SQL Server方言-如果您在不同的数据库系统上工作,它将不存在。COALESCE是标准的(并扩展到2个以上参数,正确获取数据类型,等等)@Damien_The_uncerver
ISNULL
在MySql中也受支持。Oracle等价物是NVL
,SqlLite具有IFNULL
。正确的说法是,COALESCE
是标准的,也可以使用COALESCE
还支持多个参数来检查null,因此它更强大。
case when R1.Type is null then 'ND' else R1.Type end AS Referred_by_3
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 ...