Sql server 合并而不偏好顺序

Sql server 合并而不偏好顺序,sql-server,coalesce,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()参数的顺

我有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
试试这个:

SELECT (SELECT MAX(v) 
        FROM (VALUES (col1), (col2), (col3)) AS x(v))
FROM mytable        
上面的查询使用以构建包含所有三个表列的内联表。在此表上应用
MAX
,将返回非空值

编辑:

您似乎可以通过简单使用以下工具获得所需的结果:

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

尝试以下操作:

SELECT (SELECT MAX(v) 
        FROM (VALUES (col1), (col2), (col3)) AS x(v))
FROM mytable        
上面的查询使用以构建包含所有三个表列的内联表。在此表上应用
MAX
,将返回非空值

编辑:

您似乎可以通过简单使用以下工具获得所需的结果:


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

最终结果是什么?不确定您需要什么,请用示例和预期结果解释“这是最好的方法吗”?最好的方法是什么?从表中选择COALESCE(col1,col2,col3)作为col有什么错?既然您声明只有一列是非空的,为什么COALESCE使用第一个非空排序很重要?最终结果会是什么样?不确定您需要什么,请用示例和预期结果解释“这是最好的方法吗”?什么是最好的方法?只需
SELECT COALESCE(col1、col2、col3)有什么问题作为表中的col
?既然您声明只有一个列是非空的,那么COALESCE使用第一个非空顺序又有什么关系呢?为什么不按照OP的提示使用
COALESCE
选择COALESCE(col1、col2、col3)正如mytable中的col所做的那样:@LasseV.Karlsen是的,你是对的。我把事情复杂化了。你也可以将它添加为一个持久化的计算列,这样你就不必每次需要数据时都计算出来:
ALTER TABLE mytable将实际值添加为COALESCE(col1,col2,col3)持久化
为什么不直接使用
合并
作为OP提示?
选择合并(col1、col2、col3)正如mytable中的col所做的那样,@LasseV.Karlsen是的,你是对的。我说的太复杂了。你也可以将它添加为一个持久化的计算列,这样你就不需要在每次需要数据时都计算出来:
ALTER TABLE mytable add react_VALUE AS COALESCE(col1,col2,col3)persisted