2

这应该是一件容易的事,但我似乎不断获得额外的空间。基本上我想做的是将多列合并为一列。但是这些列中的每一列也可能为空。当我组合它们时,我还希望它们用空格('')分隔。

我创建的是以下查询:

select 'All'= ISNULL(Name+' ','')+ISNULL(City+' ','')+ISNULL(CAST(Age as varchar(50))+' ','')  from zPerson

结果是:

All
John Rock Hill 23 
 Munchen 29 
Julie London 35 
 Fort Mill 27 
Bob  29 

如您所见:名称为空时有一个额外的空格。我不想要那个。

初始表是:

id  Name    City            Age InStates    AllCombined
1   John    Rock Hill       23  1              NULL
2           Munchen         29  0              NULL
3   Julie   London          35  0              NULL
4           Fort Mill       27  1              NULL
5   Bob                     29  1              NULL

有任何想法吗?

4

3 回答 3

3
select 'All'= LTRIM(ISNULL(Name+' ','')+ISNULL(City+' ','')+ISNULL(CAST(Age as varchar(50))+' ','')  from zPerson)

见 LTRIM()

于 2013-04-08T13:14:45.573 回答
2

在您发布的数据中,该Name列不包含 NULL。相反,它包含空字符串,因此ISNULL(Name+' ','')将评估为单个空格。

最简单的解决方案是更改数据以使空字符串为空。这在您的情况下是合适的,因为这显然是您的意图。

UPDATE zPerson SET Name=NULL WHERE Name=''

如有必要,对您的City和字段重复此操作。Age

于 2013-04-08T13:14:54.083 回答
0

在 ISNULL() 函数周围使用TRIM() ,或在整个选定术语周围使用LTRIM()

于 2013-04-08T13:13:43.863 回答