STUFF命令的格式化结果,该命令使用For XML Path将信息连接到一个单元格中



我使用STUFF命令从列中提取数据,并将它们连接到一个单元格中。

STUFF((Select CAST(v.ID as VARCHAR)+ ', '
From Source
Where CriteriaIsMet
For XML Path('')),1,0,'') as MonitorID

我正在努力完成的是在最后格式化结果。上面代码的结果如下:

12345, 23456, 34567, 456789,

我正在查找要换行的代码。我希望它们仍然在同一个单元格中,而不是分解,但当放在Excel中时,我希望结果是:

12345,
23456,
34567,
45678,

我尝试过使用:

STUFF((Select REPLACE(CAST v.ID as VARCHAR) + ', ' , ', ', +CHAR(13))

然而,最终结果并没有给我我想要的东西,我最终得到了这个:

123456
234567&#x0D

我相信我需要在声明的末尾做些什么来实现这一点,然而,我不确定如何实现这一目标,因为我使用的是:

For XML Path('')),1,0,'') 

我希望有人能找到一个简单的解决方案。如果有任何帮助,我将不胜感激。请注意,我正试图将数据保存在同一单元格中。这个数据拉取的最终结果进入Excel中的数据透视表,我希望数字垂直显示,而不是水平显示。水平显示时,数字在经过单元格长度后被截断。

试试这个。。。

SELECT STUFF((Select  CAST(v.ID as VARCHAR(30)) +  + ', '+ CHAR(10)
From Source
Where CriteriaIsMet
For XML Path(''),TYPE)
.value('.','NVARCHAR(MAX)'),1,0,'') as MonitorID

我没有添加CHAR(13)和/或CHAR(10),而是使用了CHAR(9)水平TAB。完整的STUFF参数和其他可能的大文本字段也应该被CASTED为varchar(255)

应该类似于:SELECT CAST(STUFF((...) + CHAR(9) as varchar(255)) as MonitorID

最新更新