SQL组合列字符串

时间:2013-06-16 10:39:13

标签: sql sql-server-2008-r2 sql-server-2012

我有一个类似于以下

的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
  1. 有没有更好的方法来获得我想要的结果?
  2. 我的选择案例有什么问题?

1 个答案:

答案 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
  • 在上面的修复之后,它仍然会返回null,因为case语句只有一个分支,当条件不满足时它们仍然返回null。要解决此问题,请将每个end替换为else '' end(以返回空字符串而不是null

以下是您正在使用的版本:http://www.sqlfiddle.com/#!3/02b05/11