将X个非空列作为单个字符串

IMT*_*Man 0 sql sql-server-2012

我试图找到SQL命令做某事但我不知道如何解释它所以我将使用一个例子.我有一张像这样的桌子:

| one | two | three | four | 
|-----|-----|-------|------| 
| a   | h   | i     | j    | 
| b   | k   | l     |      | 
| c   | m   | n     | o    | 
| d   | p   |       |      | 
| e   | q   |       |      | 
| f   | r   | s     |      | 
| g   | t   |       |      | 
Run Code Online (Sandbox Code Playgroud)

我需要创建新的列,从右侧获取第一个非空列,并将其反向上升并加入/连接字段.

| one | 1-up | 2-up | 3-up    | 
|-----|------|------|---------| 
| a   | j    | j, i | j, i, h | 
| b   | l    | l, k |         | 
| c   | o    | o, n | o, n, m | 
| d   | p    |      |         | 
| e   | q    |      |         | 
| f   | s    | s, r |         | 
| g   | t    |      |         | 
Run Code Online (Sandbox Code Playgroud)

因为b,列four没有数据,它three用作第一个值.其他行也一样.

我希望这是有道理的.我不知道怎么解释这个.

ano*_*non 5

你可以COALESCE像这样使用:

select one, COALESCE(four,three,two,'') as '1-up',
COALESCE(four+','+three,three+','+two,'') as '2-up',
COALESCE(four+','+three+','+two,'') as '3-up'
from Table1
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle链接在这里