sql - 寻找在 Microsoft 分析平台系统上模拟 LISTAGG(STRING_AGG) 的有效方法
问题描述
我的任务是将一些Oracle SQL迁移到Microsoft 的分析平台系统上。
原始Oracle代码基本如下:
SELECT MyID,TO_CHAR(LISTAGG(ListValue)) MyValue
FROM MyTable
GROUP BY MyID
STRING_AGG
即使在最新版本中也不支持,也没有任何常用的方法来实现这一点。
有任何想法吗?
解决方案
如果您使用的是更高版本,则可以使用STRING_AGG():
SELECT MyID, STRING_AGG(ListValue, ',') AS MyValue
FROM MyTable
GROUP BY MyID;
但是,同样可以使用较旧的 xml 方法来实现,并帮助低版本的 SQL。
SELECT MyID, STUFF ( (SELECT ', ' +CAST(t1.ListValue AS VARCHAR(255)) -- Neglate conversion if unnecessary
FROM MyTable t1
WHERE t1.MyID = t.MyID
FOR XML PATH('')
), 1, 1, ''
) AS MyValue
FROM MyTable t
GROUP BY MyID;
推荐阅读
- c++ - 为 Flickable 提供 activeFocus
- javascript - 当我在 win 10 中运行脚本 npm run watch 时 laravel Mix 出现问题,我的 laravel mix 版本是 6.0.25
- angular - 如何安全地将 Angular 项目复制到另一台计算机?
- javascript - 有没有更聪明的方法来实现用 Javascript 中的变量替换?
- styled-components - 样式化的组件使用 flowjs 自动完成
- android - 我无法将图像插入到 sqlite 数据库
- kubernetes - Airflow:无法使用 KubernetesExecutor 和 PV 获取持久日志(官方 helm 图)
- mongodb - MongoDB 查询 - 获取数组的频率图
- python - 如何正确地从 ssl.SSLSocket 继承?
- mongodb - 具有两个字段的分页聚合