我有以下数据库结构:
我希望它在单列中,如:
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值。
请帮助我获得结果。
答案 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
示例在这里