0

我有以下数据库结构:

在此处输入图像描述

我希望它在单列中,例如:

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

4 回答 4

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
于 2013-10-10T08:35:18.230 回答
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如果不满足任何条件,则返回 NULL。

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

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
于 2013-10-10T08:24:51.603 回答
1

尝试从 TableName 中选择 ISNULL(ColumName,' ') + ISNULL(ColumName,' ') as tt

于 2013-10-10T08:25:05.210 回答
1

只需删除您的附加案例,每当您使用案例 + 案例时,条件就是链式,因此每当 param1-param5 中有空值时,您的查询也将返回 u false,所以如果您只想检查,只需删除您的附加案例param1 并总结其他参数

select

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

from IVR_PPMaster 

样品在这里

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

于 2013-10-10T09:02:45.630 回答