将行转换为一列sql server

时间:2012-11-15 05:22:24

标签: sql sql-server-2008

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

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&福利,

但是sql给出了输出

  

GURPREET& amp CO。,SIMRAN TRADERS,LABOR& amp WELFARE,

如何删除& amp?

1 个答案:

答案 0 :(得分:3)

由于您在示例中保留了最后一个逗号,因此您不需要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]

注意:问题在于您使用的是一种几乎与互联网一样古老的常见模式,而这种模式并未考虑到XML入侵。使用FOR XML TYPE说明符可在通过.value, varchar(max)再次提取时保留原始文本。