【问题标题】:SQL Server - LIST AGG with quotesSQL Server - 带引号的 LIST AGG
【发布时间】:2017-09-27 16:30:12
【问题描述】:

我正在尝试使用找到的答案 here 来连接一组字符串,但我希望输出在每个项目周围都有引号。

Field A | Field B
1       |  A
1       |  B
2       |  A

1 | "A","B"
2 | "A"

SELECT FieldA , STUFF(( SELECT  ','+ FieldB FROM TableName a
WHERE b.FieldA = a.FieldA FOR XML PATH('')),1 ,1, '')  Members
FROM TableName b
GROUP BY FieldA;

我尝试在逗号前后添加引号,但格式不正确。

有什么建议吗?

【问题讨论】:

    标签: sql sql-server tsql listagg


    【解决方案1】:

    只需在 XML + STUFF 方法中添加'''' /'"'

    select distinct t1.FieldA,
      STUFF((SELECT distinct ',' + ''''+ t2.FieldB + ''''
             from yourtable t2
             where t1.FieldA = t2.FieldA
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'') data
    from yourtable t1;
    

    Rextester Demo

    编辑:

    或者使用QUOTENAME:

    select distinct t1.FieldA,
      STUFF((SELECT distinct ',' + QUOTENAME(t2.FieldB, '"')
             from yourtable t2
             where t1.FieldA = t2.FieldA
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'') data
    from yourtable t1;
    

    Rextester Demo2

    【讨论】:

      【解决方案2】:

      我更喜欢第一个建议,但这里有一个变体:

      SELECT FIELDA, ISNULL([1],'') + ' ' + ISNULL([2], '')
      FROM
          (SELECT   FIELDA, ISNULL(QUOTENAME(FieldB, '"'),'') AS FIELDB
          ,ROW_NUMBER() OVER (PARTITION BY fielda ORDER BY fielda) AS tbl
          FROM yourtable)a
      PIVOT (MAX(fieldb) FOR tbl IN ([1],[2])) AS pvt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-05
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        相关资源
        最近更新 更多