sql - 在 Oracle SQL 中使用 group 和 listagg 跨列和行连接
问题描述
我有一张像下面这样的表格,想按列分组,然后按行分组。我有一个解决方案,有点工作,但很慢。有没有更有效的方法呢?
谢谢
| GROUP | VAL 1 | VAL 2 | VAL 3 |
| A | 1 | 2 | 3 |
| A | 4 | 5 | 6 |
| B | 7 | 8 | 9 |
| C | 10 | 11 | 12 |
首选结果是
| GROUP | TEXT |
| A |123456|
| B | 789 |
| C |101112|
这是我目前拥有的,但速度很慢。是否有跨列和行分组的替代解决方案
select GROUP,
listagg(comments,',')
within GROUP (order by GROUP) "TEXT"
from
(select concat(val 1,concat(val 2,val 3)) as Comments, data.*
from data)
group by GROUP;
谢谢
解决方案
使用以下查询,您将直接获得连接的列值:
SELECT
"GROUP",
LISTAGG(VAL_1 || VAL_2 || VAL_3)
WITHIN GROUP(ORDER BY VAL_1) AS "TEXT"
FROM DATA
GROUP BY "GROUP";
注意:不要使用 oracle 保留关键字作为列名。这GROUP
是 oracle 保留关键字。
干杯!!
推荐阅读
- html - 如何以角度手动创建和访问firebase中的对象数组?
- azure-active-directory - Azure Active Directory Server 2016 组策略启动应用程序 (Chrome) 未在客户端工作站上加载
- c# - 选择卡片操作后,团队将返回空字符串
- python-3.x - 通过应用 url 函数对数据帧进行最快的迭代
- python - Selenium chromedriver 无法在 Mac 上运行?
- c++ - Qt OpenGL 渲染到纹理性能问题
- javascript - 如何编辑和运行第三方 Web 应用程序的客户端 html/javascript 源?
- php - 更改 laravel 为 auth 查看的数据库和表
- linux - 在 Linux 系统启动时从用户目录启动 docker 容器
- python - 如何从 XML 服务器操作调用 python 方法?