sql - 将行转换为一列sql server

标签 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, LABOUR & WELFARE,

但是给定输出的sql

GURPREET &amp CO., SIMRAN TRADERS, LABOUR &amp WELFARE,

如何删除 &?

最佳答案

由于您在示例中保留了最后一个逗号,因此您不需要 STUFF,尤其是当您将它与参数 ,1,0,'' 一起使用时,这是一个否-op。

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) 再次提取时保留原始文本。

关于sql - 将行转换为一列sql server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13391950/

相关文章:

sql-server - 约束检查: TRY/CATCH vs Exists()

sql - 通过 SSMS 创建的 .csv 文件中的空行 :OUT command

sql-server-2008 - 是否有在 SSRS 2008 R2 或 2012 中本地化 "parameters/prompt"的解决方案?

c# - 使用 C# 在 sql 数据库中插入日期时间值

mysql - 根据两个连接表结果从查询中排除记录

sql - 添加了 TSQL Cursor 新记录

sql - HQL查询以检查集合的大小是否为0或为空

sql - 如何在 Postgresql 中将数组拆分为行

sql - 别名在 sql server 2008 r2 上不起作用

sql-server-2008 - 快照隔离