sql - Oracle中的LISTAGG查询分批拆分
问题描述
我想在 Oracle 数据库(19.3)中按模式获取表组列表并分批拆分表列表。
示例:我有 10 个属于 HR 模式的表(A、B、C、D、E、F、G、H、I、J)。通过我的查询,我得到了这个输出
Select Schema, LISTAGG(Table_Name) FROM SchemaInfo GROUP BY Schema
架构 | 表 |
---|---|
人力资源 | A,B,C,D,E,F,G,H,I,J |
我想将组拆分为 5 个元素的批次并获得如下输出:
架构 | 表 |
---|---|
人力资源 | A,B,C,D,E |
人力资源 | F,G,H,I,J |
有没有办法得到这个输出?我对 SQL 有类似的东西,但在 Oracle 中没有采用相同的方法。
解决方案
可能有一种更简单的方法,但这是我做的一个例子all_tables
:
select owner, listagg(table_name, ',')
from (
select owner, table_name, floor(row_number() over (partition by owner order by table_name)/5) as batch
from all_tables)
group by owner, batch
order by owner, batch
使用您的表,它看起来像:
select Schema, listagg(table_name, ',') as Tables
from (
select Schema, table_name, floor(row_number() over (partition by Schema order by table_name)/5) as batch
from SchemaInfo)
group by Schema, batch
order by Schema, batch
推荐阅读
- html - 如何对 2 值进行 v-model?
- php - 使用过程和 PDO 从 mysql 返回
- java - 使用java在mongodb上分页的最佳方法是什么
- jquery - 使用引导程序和 jQuery 切换类
- r - 如何在第一个完整分钟之前删除秒数
- java - 从角度5的字节数组中打开pdf
- angular-ui-router - UI-Router 状态控制器:Named vs Inline Function
- angular - Typescript 自定义接口变量声明
- c# - .NET Core:不呈现 ViewModel 属性
- serilog - 如何在我的基类中创建带有丰富器的记录器,它必须在类中使用某些东西?