SQLServer如何合并组内字符串
但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 难点解决:直观分组
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
以上是 SQLServer如何合并组内字符串 的全部内容, 来源链接: utcz.com/z/533778.html