在SQL中将两列数据合并为一列?

3
我正在尝试在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

但我希望看到 sort_name 变成'Aa,Robert'
5个回答

8

COALESCE函数:

  COALESCE([Last_Name], '') + ',' + COALESCE([First_Name], '') + ' ' + 
  COALESCE( 
          [Middle_Name], '') AS SORT_NAME

当姓氏为空或名字和中间名均为空时,这样做会留下丑陋的逗号,因此您的实际代码需要更加聪明一些。

如果您将逗号包含在 COALESCE 中,就不会出现这个问题。例如:COALESCE([Last_Name] + ',' , '') - vol7ron
如果你假设中间名是唯一的“可选”字段,那么返回true就可以了。如果你可能有名字但没有中间名,或者有中间名但没有名字,那就更难了。OP 知道他的数据规则,这就是为什么我留给他自己处理了。但你提出的观点很有帮助,我应该把它包括进去。谢谢。 - drdwilcox

2
使用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

2

1
请注意,我将名字和中间名之间的空格移动到 COALESCE 内部,这样当中间名为 NULL 时,就避免了末尾空格的问题。
..., [Last_Name]+ ','+ [First_Name] + COALESCE(' '+ [Middle_Name],'') as SORT_NAME...

0

尝试一下

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

2
增加更多细节并解释答案。 - Ram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接