mysql分组后组内排序_SQL Server 如何合并组内字符串

就是在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可以这样合并组内字符串:

63ca44ccc078f90ea327328c4f3dff89.png

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

esProc是个脚本语言,可以在IDE里反复执行,还可以用命令行方式调用,适合简化SQL中的难题。类似上面简化分组SQL的例子:

SQL 难点解决:直观分组
SPL 简化 SQL 案例详解:行间计算
SPL 简化 SQL 案例详解:计算各组前 N 行
SPL 简化 SQL 案例详解:多层固定分组

这里有优化 SQL 的汇总 集算器优化 SQL 汇总
这里是常用的 esProc 算法 http://doc.raqsoft.com.cn/esproc/coderefer/

esProc提供了敏捷的语法体系和丰富的结构化类库,可通用地解决SQL难题,详情参考http://www.raqsoft.com.cn/wx/sql-solver.html

关于集算器安装使用、获得免费授权和相关技术资料,可以参见

http://c.raqsoft.com.cn/article/157189535077

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值