合并而无需优先订购

时间:2016-02-01 20:02:33

标签: sql-server coalesce

我有3列我试图进入1.在每一行中,3个中只有1个将被填充。例如:

**col1 | col2 | col3**  
 10    | null | null  
 null  | 15   | null  
 null  | null | 9  
 22    | null | null  
 null  | 2    | null  
 17    | null | null  

我想现在将所有列合并为一个。
首先,这是最好的方法吗?

其次,有没有办法指定COALESCE()参数的顺序是否重要?

编辑:最终结果应为:

col1  
----  
10  
15  
9  
22  
2  
17

1 个答案:

答案 0 :(得分:3)

试试这个:

SELECT (SELECT MAX(v) 
        FROM (VALUES (col1), (col2), (col3)) AS x(v))
FROM mytable        

上述查询使用Table Value Constructor来构建包含所有三个表列的内联表。在此表上应用MAX将返回非空值。

Demo here

修改:

通过简单地使用COALESCE

,您似乎可以获得所需的结果
SELECT COALESCE(col1, col2, col3) AS col
FROM mytable 

COALESCE表达式将返回第一个非空字段的值。