空白检查返回null的情况

时间:2013-10-10 08:10:31

标签: sql sql-server-2008-r2

我有以下数据库结构:

enter image description here

我希望它在单列中,如:

Param

-
-
AccountNo
AccountNo DueDate

对于我在查询时写的案例:

select

case when Param1 <>'' then 'Param1'+Param1 
+case when Param2  <>'' then 'Param2'+Param2   
+case when Param3  <>'' then 'Param3'+Param3  
+case when Param4  <>'' then 'Param4'+Param4 
+case when Param5  <>'' then 'Param5'+Param5

end  
end
end
end
end
'param'

from IVR_PPMaster 

但是这个查询返回了所有NULL值。

请帮助我获得结果。

4 个答案:

答案 0 :(得分:2)

您可以NullIf()使用IsNull()/Coalesce()功能,如下所示:

Select coalesce(nullif(param1,''),'') + coalesce(nullif(param2,''),'') + ... + 
       coalesce(nullif(param5,''),'') newColName
From yourTable

对于你的案例,只需进行如下的空检查即可:

Select coalesce(param1,'') + coalesce(param2 + ' ','') + ... + 
       coalesce(param5 + ' ','') newColName
From yourTable

答案 1 :(得分:1)

如果你缩进它,你会得到(我保留了第一个只有前三个参数)

select case when Param1 <>'' 
            then 'Param1'+Param1 + case when Param2  <>'' 
                                        then 'Param2'+Param2 +case when Param3  <>'' 
                                                                   then 'Param3'+Param3
                                                              end  
                                   end
       end
as 'param'
from IVR_PPMaster

很明显,如果Param1为空,则此代码将返回NULL,因为如果没有满足任何条件,那么case将返回。

基本上,如果没有任何参数为空,则此代码将仅返回一个字符串。您需要非嵌套案例才能获得正确的结果

select case when Param1 <>'' then 'Param1'+Param1
            else '' -- this is needed because adding a null to a string yields null
       end
        + case when Param2  <>'' then 'Param2'+Param2 
               else ''
          end
        + case when Param3  <>'' then 'Param3'+Param3 
               else ''
          end
as 'param'
from IVR_PPMaster

答案 2 :(得分:1)

试 选择ISNULL(ColumName,'')+ ISNULL(ColumName,'')作为来自TableName的tt

答案 3 :(得分:1)

只是删除你的添加案例,每当你使用case + case时,条件就是链,所以每当param1-param5中有空值时,你的查询也会返回u false,所以如果你只是想删除你的添加案例检查param1并总结其他param

select

case when Param1 <>'' then +Param1 
+Param2   
+Param3  
+Param4 
+Param5
else ' '
end
'param'

from IVR_PPMaster 

示例在这里

http://sqlfiddle.com/#!3/70bdb/3