我有一个类似于以下
的sql表p1 c1 c2 c3 c4 c5 c6 c7
A B C D E F NULL NULL
A B C NULL NULL NULL NULL NULL
A B NULL NULL NULL NULL NULL NULL
A NULL NULL NULL NULL NULL NULL NULL
我需要一个带有1列的select sql查询,输出看起来像
Result
A > B > C > D > E > F
A > B > C
A
我尝试了嵌套的选择案例但是我只获得了空值
select
case when x.p1 IS not NULL then(
x.p1 + case when x.c1 IS not NULL then(
' > '+ x.c1 + case when x.c2 IS not NULL then(
' > '+ x.c2 + case when x.c3 IS not NULL then(
' > '+ x.c3 + case when x.c4 IS not NULL then(
' > '+ x.c4 + case when x.c5 IS not NULL then(
' > '+ x.c5 + case when x.c6 IS not NULL then(
' > '+ x.c6 + case when x.c7 IS not NULL then(
' > '+ x.c7 )end )end )end )end )end )end )end) end as tree
from mytable
答案 0 :(得分:3)
基于TSQL 'a string' + null
等于null
的事实,您可以将查询简化为:
select
p1
+ isnull(('>' + c1), '')
+ isnull(('>' + c2), '')
+ isnull(('>' + c3), '')
+ isnull(('>' + c4), '')
+ isnull(('>' + c5), '')
+ isnull(('>' + c6), '')
+ isnull(('>' + c7), '')
from mytable
SQLFiddle链接:http://www.sqlfiddle.com/#!3/02b05/8
我的选择案例有什么问题?
您使用的表别名x
似乎无法在任何地方定义。
我的查询分两步进行:
x
表别名。为此,只需在末尾写下mytable x
,而不只是mytable
case
语句只有一个分支,当条件不满足时它们仍然返回null
。要解决此问题,请将每个end
替换为else '' end
(以返回空字符串而不是null
)以下是您正在使用的版本:http://www.sqlfiddle.com/#!3/02b05/11