合并两列';在SQL中将数据合并到一列中?

合并两列';在SQL中将数据合并到一列中?,sql,sql-server,Sql,Sql Server,我正在尝试将姓氏、名和中间名合并到SQL语句中的单个排序名列中。有时中间名将是NULL,如果是这种情况,排序名将显示NULL 如何处理 SELECT TOP 500 Last_Name, First_Name, Middle_Name, [Last_Name] + ',' + [First_Name] + ' ' + [Middle_Name] AS SORT_NAME FROM [dbo].[usr_CUSTOMER] ORDER BY SORT_NAME 结果: Last_Name

我正在尝试将姓氏、名和中间名合并到SQL语句中的单个排序名列中。有时中间名将是
NULL
,如果是这种情况,排序名将显示
NULL

如何处理

SELECT TOP 500
  Last_Name, First_Name, Middle_Name,
  [Last_Name] + ',' + [First_Name] + ' ' + [Middle_Name] AS SORT_NAME
FROM [dbo].[usr_CUSTOMER]
ORDER BY SORT_NAME
结果:

Last_Name  First_Name   MiddleName  Sort_Name
Aa         Robert       NULL        NULL
但是我想看到排序名是
'Aa,Robert'


当然,当姓氏或first和middle都为空时,这将留下难看的逗号,因此您的实际代码需要更聪明一些。

注意,我在COALESCE中移动了分隔first和middle name的空格,以便在middle name为NULL时避免出现尾随空格

..., [Last_Name]+ ','+ [First_Name] + COALESCE(' '+ [Middle_Name],'') as SORT_NAME...
使用
ISNULL()
函数-它将
NULL
值替换为您定义的值:

SELECT TOP 500 
    Last_Name, First_Name, Middle_Name, 
    [Last_Name] + ',' + [First_Name] + ' ' + ISNULL([Middle_Name], '') as SORT_NAME   
FROM [dbo].[usr_CUSTOMER]  
ORDER BY SORT_NAME

您可以使用ISNULL函数

ISNULL ( check_expression , replacement_value )
文档:

试试看

CONCAT(firstname,' ', LastName,' ', MiddleName) AS Full_Name

当然,如果您只是将逗号作为
coalesce
的一部分,您就不会有这个问题。例如
COALESCE([Last_Name]+',','')
true,但前提是假设中间名是唯一可选字段。如果你可以有第一名但没有中间名,或者中间名但没有第一名,那就更难了。OP知道他的数据规则,所以我把它留给了他。但是你的观点很有帮助,我应该包括在内。谢谢。添加更多细节并解释答案。
CONCAT(firstname,' ', LastName,' ', MiddleName) AS Full_Name