Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
在select语句中使用sql-ISNOTNULL_Sql_Sql Server_Null_Isnull_Ifnull - Fatal编程技术网

在select语句中使用sql-ISNOTNULL

在select语句中使用sql-ISNOTNULL,sql,sql-server,null,isnull,ifnull,Sql,Sql Server,Null,Isnull,Ifnull,我似乎不知道如何在sql中使用与isnull或ifnull相反的语句。我需要说如果a.Error1不为空-然后打印“-”和+CHAR13+CHAR10。如果a.Error1返回空值,基本上不应该有破折号或新行中断。因此,如果字段不为空,则打印信息 select a. .... ' - ' + a.Error1 + CHAR(13)+CHAR(10) + ' - ' + a.Error2 + CHAR(13)+CHAR(10) + ' - ' + a.Error3 + CHAR(13)+CH

我似乎不知道如何在sql中使用与isnull或ifnull相反的语句。我需要说如果a.Error1不为空-然后打印“-”和+CHAR13+CHAR10。如果a.Error1返回空值,基本上不应该有破折号或新行中断。因此,如果字段不为空,则打印信息

select a. .... 
' - ' + a.Error1 + CHAR(13)+CHAR(10) + 
' - ' + a.Error2 + CHAR(13)+CHAR(10) + 
' - ' + a.Error3 + CHAR(13)+CHAR(10) + 
' - ' + a.Error4 + CHAR(13)+CHAR(10) + 
' - ' + a.Error5 + CHAR(13)+CHAR(10) + 
' - ' + a.Error6                      as 'error_message'
... 
from table1 a 
例如,如果对于给定的记录error1、Error2和Error5返回输出,我希望输出如下: -错误1:有一个。。。 -错误2:。。。。 -错误5:数据是

如果该行不存在错误,则该行应为空/空字段

您可以使用以下用例:

该函数在这里实现了您想要的功能。COALESCE的结果是它传递的第一个非空值。下面我们使用,它不同于NULL,因此外部+总是应用于非NULL字符串

e、 g


对!!我知道我已经晚了5年,但我也遇到了这个问题

奇怪的是它怎么就不存在了!是空的,但不管怎样

请尝试以下操作以获得更清晰的代码:

select a. .... 
 IIF(a.Error1 IS NOT NULL, ' - ' + a.Error1 + CHAR(13)+CHAR(10) , '') as Error1,
 IIF(a.Error1 IS NOT NULL, ' - ' + a.Error1 + CHAR(13)+CHAR(10) , '') as Error2
from table1 a 

了解有关IIF函数的更多信息:

如果值为null,是否无法使用类似于evaluate的方法?并在此基础上打印输出?此外,对于给定的行,可能会有多个错误,因此我们需要输出包括error1和error2等。我们不能使用案例,因为一旦发现一个错误,其他案例将不会被计算。@Elizabeth case是SQL Server中的方法。那么,如果a.Error1为null,您想要什么样的输出?如果a.Error1为null,只需要一个空格或空字段。否则,应打印所有数据的实际值errors@Elizabeth这正是上面代码所做的:如果a.Error1为null,则在其位置使用空字符串。您可以用“”替换以获得一些空白。对,上面的代码很好-但是如果case1是正确的,case2没有计算等等,case语句难道不起作用吗?我希望对所有案例进行评估,并打印所有错误,因为每行可能有多个错误。您应该解释为什么这样做有效,并且比其他答案更好,即使用NULL连接返回NULL可能的重复
SELECT (CASE WHEN a.Error1 IS NOT NULL
            THEN ' - ' + a.Error1 + CHAR(13)+CHAR(10) +
            ELSE a.Error1
            END) +
      (CASE WHEN a.Error2 IS NOT NULL
            THEN ' - ' + a.Error2 + CHAR(13)+CHAR(10) +
            ELSE a.Error2
            END) +
    .....etc
select a. .... 
    COALESCE( ' - ' + a.Error1 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error2 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error3 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error4 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error5 + CHAR(13)+CHAR(10), '' ) + 
    COALESCE( ' - ' + a.Error6 , '' ) as 'error_message'
... 
from table1 a
select a. .... 
 IIF(a.Error1 IS NOT NULL, ' - ' + a.Error1 + CHAR(13)+CHAR(10) , '') as Error1,
 IIF(a.Error1 IS NOT NULL, ' - ' + a.Error1 + CHAR(13)+CHAR(10) , '') as Error2
from table1 a