SQL Concatenation使用case语句

gen*_*nie 1 sql t-sql sql-server

我有一个看起来像这样的表:

**ID    col1  col2  col3  col4  col5**    
1       abc   NULL  NULL  NULL  NULL    
2       ght   cde   NULL  NULL  NULL    
3       atr   dgf   aft   NULL  NULL     
4       asd   rty   tyu   xyz   NULL     
5       abc   pqr   xyz   rst   rty    
6       qwe   rty   ghj   rty   tyu  
Run Code Online (Sandbox Code Playgroud)

我希望它以这种形式改变:

**ID    NewCol**    
1   abc    
2   ght/cde    
3   atr/dgf/aft    
4   asd/rty/tyu/xyz    
5   abc/pqr/xyz/rst/rty    
6   qwe/rty/ghj/rty/tyu   
Run Code Online (Sandbox Code Playgroud)

我写的查询是:

     SELECT ID,     
    NewCol = CASE WHEN col1 IS NOT NULL AND col2 IS NULL THEN col1    
                WHEN col1 IS NOT NULL  AND col3 IS NULL THEN col1+'/' + col2    
                WHEN col1 IS NOT NULL AND col4 IS  NULL THEN col1+'/'+ col2 + '/' + col3    
                WHEN col1 IS NOT NULL AND col5 IS NULL THEN col1+'/' + col2 + '/' + col3+ '/' + col4     
                WHEN col1 IS NOT NULL AND col5 IS not NULL THEN col1+'/' + col2 + '/' + col3+ '/' + col4 + '/' + col5     
                ELSE NULL     
  END     
   FROM dbo.Temp 
Run Code Online (Sandbox Code Playgroud)

如果我们有10列,那么我认为这可能不是一个有效的方式来写这个.
你能帮我找到更好的解决方案吗?
谢谢.

Gor*_*off 5

我认为这更简单:

select (col1 + coalesce('/' + col2, '') + coalesce('/' + col3, '') + 
        coalesce('/' + col4, '') + coalesce('/' + col5, '')
       )
Run Code Online (Sandbox Code Playgroud)

这假设col1始终具有值.