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

时间:2017-11-20 04:22:27

标签: 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   |       |      | 

我需要创建新的列,从右侧开始采用第一个非空列,并将其反转并加入/连接字段。

| 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    |      |         | 

对于b,由于列four没有数据,因此它使用three作为第一个值。其他行也一样。

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

1 个答案:

答案 0 :(得分: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

SQL小提琴链接Here