2

我正在使用以下查询将行转换为列

SELECT STUFF((SELECT NAME + ',' FROM TABLE1
FOR XML PATH('')),1,0,'') AS [ACCOUNT NAMES]

该表具有以下数据

NAME 
-------------------
GURPREET & CO.
SIMRAN TRADERS
LABOUR & WELFARE
-------------------

我想要像这样的输出

GURPREET & CO., SIMRAN TRADERS, LABOR & WELFARE,

但是sql给出了输出

GURPREET & CO., SIMRAN TRADERS, LABOR & WELFARE,

我怎样才能删除&?

4

1 回答 1

7

由于您在示例中保留了最后一个逗号,因此您不需要 STUFF,特别是如果您将它与,1,0,''无操作的参数一起使用时。

SELECT
    (SELECT NAME + ','
       FROM TABLE1
        FOR XML PATH(''),type).value('.','nvarchar(max)') AS [ACCOUNT NAMES]

如果您确实想删除最后一个逗号,那么它应该是这样的:

SELECT STUFF(
    (SELECT ',' + NAME
       FROM TABLE1
        FOR XML PATH(''),type).value('.','nvarchar(max)'),1,1,'') AS [ACCOUNT NAMES]

注意:问题在于您使用的通用模式几乎与 Internet 一样古老,它没有考虑 XML 实体化。使用说明FOR XML TYPE符在通过 . 再次提取时保留原始文本.value, varchar(max)

于 2012-11-15T05:24:15.770 回答