【问题标题】:Multiple rows to one comma-separated value different ID多行到一个逗号分隔值不同的 ID
【发布时间】:2017-08-08 18:33:42
【问题描述】:

这个问题在这里已经有了答案:
Multiple rows to one comma-separated value [duplicate] 1 个答案

我想在 SQL Server 中创建一个表值函数,我想以逗号分隔的值返回数据。

例如表:tbl

ID | Value
---+-------
 1 | 100
 1 | 200
 1 | 300  
 2 | 600
 2 | 700

现在当我在 SQL Server 中执行查询时,我希望表如下:

ID | Value
---+-------
 1 | 100,200,300
 2 | 600,700

【问题讨论】:

    标签: sql sql-server concat sql-server-group-concat


    【解决方案1】:

    测试数据

    DECLARE @Table1 TABLE(ID INT, Value INT)
    INSERT INTO @Table1 VALUES (1,100),(1,200),(1,300),(1,400)
    

    查询

    SELECT  ID
           ,STUFF((SELECT ', ' + CAST(Value AS VARCHAR(10)) [text()]
             FROM @Table1 
             WHERE ID = t.ID
             FOR XML PATH(''), TYPE)
            .value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
    FROM @Table1 t
    GROUP BY ID
    

    结果集

    ╔════╦═════════════════════╗
    ║ ID ║     List_Output     ║
    ╠════╬═════════════════════╣
    ║  1 ║  100, 200, 300, 400 ║
    ╚════╩═════════════════════╝
    

    【讨论】:

      【解决方案2】:
          CREATE TABLE #Table1
              ([ID] int, [Value] int)
          ;
      
          INSERT INTO #Table1
              ([ID], [Value])
          VALUES
              (1, 100),
              (1, 200),
              (1, 300),
              (2, 600),
              (2, 700)
      
      
      
          select  id
             ,stuff((select ', ' + cast(value as varchar(10)) [text()]
               from #table1 
               where id = t.id
               for xml path(''), type)
              .value('.','nvarchar(max)'),1,2,' ') value
      from #table1 t
      group by id
      

      输出

      ID  Value
      1    100, 200, 300
      2    600, 700
      

      【讨论】:

        【解决方案3】:

        使用 STUFF 方法获取结果:

        CREATE TABLE #table ( ID INT, Value INT)
        INSERT INTO #table ( ID , Value )
        SELECT  1 , 100 UNION ALL
        SELECT   1 , 200 UNION ALL
        SELECT  1 , 300   UNION ALL
        SELECT  2 , 600 UNION ALL
        SELECT  2 , 700
        
          SELECT ID , STUFF
         (
            (
             SELECT  ', ' + CAST(Value AS VARCHAR)
             FROM #table Inr WHERE inr.ID = Otr.ID FOR XML PATH('')
             ),1,1,'') 
         FROM #table Otr
         GROUP BY ID
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-04-02
          • 1970-01-01
          • 2015-07-30
          • 2014-03-12
          • 2021-05-14
          • 1970-01-01
          相关资源
          最近更新 更多