2

我有一个如下所示的 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. 我的选择案例有什么问题?
4

1 回答 1

3

'a string' + null基于在 TSQL equals中的事实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。要解决此问题,请将 every 替换endelse '' end(返回空字符串而不是 a null)

这是您的版本:http ://www.sqlfiddle.com/#!3/02b05/11

于 2013-06-16T10:45:02.083 回答