将多行连接成字符串

问题描述 投票:0回答:1

我试图将查询的多行连接成一个字符串,但没有得到我期望的结果。我正在使用的示例应该返回一行,其中第 1 行和第 2 行的值连接在第 1 行中,并用逗号分隔。相反,我得到了两行,其中第 1 行与其自身连接,第 2 行除了前面有一个逗号外保持不变。

预期结果:

A型、B型

实际结果:

,类型A,类型A
,B型
(SELECT ',' + a.order_code
 FROM table_A a
 WHERE a.account_number = b.account_number
 FOR XML PATH ('')) AS Code3

我在这里做错了什么?谢谢!

注意:我正在 SQL Server 2014 中工作,因此 STRING_AGG 不适合我。

sql sql-server aggregate-functions string-concatenation stuff
1个回答
1
投票

你没有做错任何事。你只需要把前面的逗号去掉就可以了。您可以使用

STUFF
函数来执行此操作。

STUFF
的第三个参数应该是分隔符的长度。

您还应该使用

.value
来转义任何可能的 XML 字符。

STUFF(
  (
    SELECT ',' + a.order_code
    FROM table_A a
    WHERE a.account_number = b.account_number
    FOR XML PATH (''), TYPE
  ).value('text()[1]', 'nvarchar(max)'),
  1, 1, '') AS Code3
© www.soinside.com 2019 - 2024. All rights reserved.