ITPub博客

首页 > 应用开发 > IT综合 > SQL Server 如何合并组内字符串

SQL Server 如何合并组内字符串

IT综合 作者:xiaohuihui 时间:2020-05-27 12:15:53 0 删除 编辑

就是在SQL SERVER实现类似MYSQL中group_concat函数的功能,把分组中的字串拼接起来。SQL Server 2017可以用STRING_AGG函数实现,比如SELECT G, STRING_AGG(S, ',') FROM T GROUP BY G(按表T的G字段分组,组内S字段拼接起来);

但2016版没有STRING_AGG函数,就会麻烦很多:

SELECT p2.G,

SS = JSON_VALUE(

   REPLACE(

     (SELECT _   = p1.S FROM T p1 WHERE p1.G = p2.G FOR JSON PATH)

      ,'"},{"_":"',', '),'$[0]._'

)

FROM  T p2

SQL Server 2014需要3层嵌套来合并组内字符串,还得借助XML,代码看起来非常复杂:

SELECT Main.G,

         LEFT(Main.SS,Len(Main.SS)-1) As "SS"

FROM

    (

        SELECT   DISTINCT p2.G,

            (

                  SELECT p1.S + ',' AS [text()]

                  FROM T p1

                  WHERE p1.G = p2.G

                  ORDER BY p1.G

                  FOR XML PATH ('')

            )[SS]

        FROM T   p2

)[Main]

其他版本的SQL  Server写法虽然各有不同,但通常也很复杂。

当数据库没有类似group_concat这样的函数时,可以用esProc协助实现,代码会简单很多。同样针对2014版SQL Server,esProc可以这样合并组内字符串:


A B
1 =db.query("select G, S from T") /query from SQL Server 2014
2 =A1.group(G; ~.(S).concat(",")) /用逗号合并多行

这样就可以实现类似group_concat的功能了,而且任何数据库上都可以用。

 

esProc是个脚本语言,可以在IDE里反复执行,还可以用命令行方式调用,适合简化SQL中的难题。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69900830/viewspace-2694657/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-12-01

  • 博文量
    326
  • 访问量
    194649