使用xml将不同行中的数据连接到一列时,如何删除空间?

时间:2018-12-14 10:12:45

标签: sql-server xml sql-server-2014

我正在尝试将来自不同行的数据合并为一列,这仅解决了一个小问题。

declare @RitID int = 16

select ...,

       ( select distinct
                ISNULL(LTRIM(RTRIM(r2.LotNr)), LTRIM(RTRIM(r.LotNr))) + '+' as 'data()'
         from   tblExtraBestemming eb2   
           inner join tblRit r2 on eb2.RitID = r2.RitID
         where  eb2.BestemmingID = eb.BestemmingID
         and    eb2.BestemmingTypeID = eb.BestemmingTypeID
         and    (  (eb.CombinedChildExtraBestemmingID is null and eb2.RitID = @RitID)
                   or
                   (eb.CombinedChildExtraBestemmingID is not null and eb2.RitID in (select r4.RitID from tblRit r4 where r4.MasterRitID = @RitID) )
                )
         for XML PATH('')
       ) as LotNr
from tblExtraBestemming eb
where ...

这将为LotNr列返回正确的数据,像这样

GTT18196
GTT18197
GTT18198+ GTT18199

现在我唯一的问题是结果中第三行+后面的空格,我该如何摆脱呢?

我希望这个结果

GTT18196
GTT18197
GTT18198+GTT18199

PS,实际上每行的末尾还有一个+,但是客户端已将其删除。我以为我最好提起这个了。

编辑
我检查了数据,数据的结尾或开头没有空格

编辑
查询已更新,如@Larnu所建议

编辑
如果我检查表中的数据,这就是结果

select '/' + r.LotNr + '/' from tblRit r where r.RitID in (50798, 50799)

COLUMN1 
------- 
/GTT18198/  
/GTT18199/  

所以在我看来,数据前后没有字符

1 个答案:

答案 0 :(得分:1)

只需从查询中删除AS 'data()'(在上述情况下不需要)。

如果尾随+是一个问题,请将其移到开头并使用STUFF函数从结果中截去第一个字符。