本文主要是介绍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可以这样合并组内字符串:
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中的难题。类似上面简化分组SQL的例子:
SQL 难点解决:直观分组
这篇关于SQL Server 如何合并组内字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!