问题描述
从具有100,000记录的表中获得一个SQL,一个特定的varchar2字段包含诸如 “12345”,“56789”,“1111” 之类的字符串。
我想用适当的逗号创建一个带有拆分/分块的表
在实时链接中的示例 ::: 在组 (按id排序) 中选择listagg(id,',') 从 (从ad.AD_STUDENT_COURSE_DETAILS中选择course_id作为id)
示例:: 100条记录每条记录具有以下id
现在假设基于上述结果集,我应该能够根据自己的定义使我的序列动态并将一组记录插入逗号分隔值 (listagg) 中
如果我给22它应该得到的值,并分布到4块和剩余的左基于选择查询结果,并使相应的块的序列。在这个例子中,我的select查询中的99条记录已加载到具有5条记录 (5个序列号) 的新表中,每条记录携带22条记录,其余记录。
新表
是否可以在SQL查询中实现与上述格式或PL/SQL块的结果相同的结果?
感谢你的帮助。
要将行拆分为每组中有N行的组:
-将row_number() 分配给表 (如果还没有) 从1开始的顺序行号
-将这个行号除以N,返回它的ceil
-按此表达式分组:
我想用适当的逗号创建一个带有拆分/分块的表
在实时链接中的示例 ::: 在组 (按id排序) 中选择listagg(id,',') 从 (从ad.AD_STUDENT_COURSE_DETAILS中选择course_id作为id)
示例:: 100条记录每条记录具有以下id
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99
现在假设基于上述结果集,我应该能够根据自己的定义使我的序列动态并将一组记录插入逗号分隔值 (listagg) 中
如果我给22它应该得到的值,并分布到4块和剩余的左基于选择查询结果,并使相应的块的序列。在这个例子中,我的select查询中的99条记录已加载到具有5条记录 (5个序列号) 的新表中,每条记录携带22条记录,其余记录。
新表
seq_number list_of_ids 1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 2 23,2425,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44 3 45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66 4 67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88 5 89,90,91,92,93,94,95,96,97,98,99
是否可以在SQL查询中实现与上述格式或PL/SQL块的结果相同的结果?
感谢你的帮助。
要将行拆分为每组中有N行的组:
-将row_number() 分配给表 (如果还没有) 从1开始的顺序行号
-将这个行号除以N,返回它的ceil
-按此表达式分组:
with rws as ( select level rn from dual connect by level <= 100 ), grps as ( select r.*, ceil ( rn / 22 ) grp from rws r select grp, listagg ( rn, ',' ) within group ( order by rn ) vals from grps group by grp; GRP VALS 1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 2 23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44