我有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
答案 0 :(得分:3)
试试这个:
SELECT (SELECT MAX(v)
FROM (VALUES (col1), (col2), (col3)) AS x(v))
FROM mytable
上述查询使用Table Value Constructor来构建包含所有三个表列的内联表。在此表上应用MAX
将返回非空值。
修改:
通过简单地使用COALESCE:
,您似乎可以获得所需的结果SELECT COALESCE(col1, col2, col3) AS col
FROM mytable
COALESCE
表达式将返回第一个非空字段的值。