Sql server 合并而不偏好顺序
我有3个专栏,我想把它们改成1个。在每一行中,仅填充3个中的1个。例如: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()参数的顺
**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