【问题标题】:using recursive function to simulate group_concat使用递归函数模拟 group_concat
【发布时间】:2019-06-16 06:11:21
【问题描述】:

我有一张这样的桌子

ID NAME
1  STALIN
2  MERWIN
1  AMALA
1 RAYON

我想退出

ID NAME
1 STALIN,AMALA,RAYON
2 MERWIN

如何使用递归函数来做到这一点

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • 标记您正在使用的 DBMS(即MySQL、SQL Server 等)。
  • 是..使用SQL server递归函数
  • 哪个版本的 SQL-Server ..?
  • @barbaros:我想使用递归函数来实现这一点。

标签: sql sql-server function recursion sql-server-2012


【解决方案1】:

你可以使用XML Path来做到这一点

SELECT ID, NAME = 
STUFF((SELECT ', ' + NAME
       FROM your_table b 
       WHERE b.ID = a.ID 
      FOR XML PATH('')), 1, 2, '')
FROM your_table a
GROUP BY ID

Live Demo

Follow this link 并查看案例 3。它解释了为什么在递归游标上使用 XML 路径。

【讨论】:

    【解决方案2】:

    你可以使用FOR XML PATH得到结果:

    例如:

    DECLARE @EXAMPLE TABLE (ID int, NAME nvarchar(10))
    INSERT @EXAMPLE VALUES (1,'STALIN'),(2,'MERWIN'),(1,'AMALA'),(1,'RAYON')
    
    SELECT
        ID,
        SUBSTRING(NAME,0,LEN(NAME)) AS NAME
    FROM (  SELECT DISTINCT 
                T1.ID,
                STUFF(( SELECT DISTINCT '' + t2.NAME + ','
                        FROM @EXAMPLE T2
                        WHERE T1.ID = T2.ID
                        FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') 
                        ,1,0,'') NAME
            FROM @EXAMPLE t1) AS info
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 2012-07-24
      • 2011-09-18
      • 2011-06-24
      相关资源
      最近更新 更多