Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL视图-如果为空,是否添加默认值?_Sql_Sql Server_Sql Server 2005 - Fatal编程技术网

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 ...