2011-11-16 110 views
3

我试图在SQL语句中将姓,名和中间名合并为单个排序名称列。有时中间名将是NULL,如果是这种情况,排序名称将显示NULL在SQL中将两列的数据组合成一列?

如何处理?

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'

回答

8

COALESCE

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

当然,这会留下难看的逗号时,姓氏或第一和中间是空的,所以你的实际代码将需要更聪明一点。

+0

糟糕,我完全剥落了。感谢编辑。 – drdwilcox

+0

当然,如果你只是将逗号作为'coalesce'的一部分,你就不会有这个问题。例如'COALESCE([Last_Name] +',','')' – vol7ron

+0

是真实的,但只有当您假定中间名是唯一的_optional_字段。如果你可以有第一,但没有中间或中间,但没有第一,它会变得更加困难。 OP知道他的数据规则,这就是为什么我把它留给他。但是你的观点很有帮助,我应该包括它。谢谢。 – drdwilcox

1

请注意,我在COALESCE中移动了分隔第一个和中间名的空格,以避免在中间名为NULL时存在尾部空格。

..., [Last_Name]+ ','+ [First_Name] + COALESCE(' '+ [Middle_Name],'') as SORT_NAME... 
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 
0

尝试

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

添加更多细节并解释答案。 – Ram

相关问题