相关文章推荐
安静的水桶  ·  pdf.js viewer.js ...·  2 年前    · 
捣蛋的长颈鹿  ·  深入探索透视纹理映射(下)_51CTO博客_ ...·  2 年前    · 
想出国的羽毛球  ·  使用<a>以特定属性为目标 - 问答 - ...·  2 年前    · 
怕老婆的手套  ·  C++:内部类的概念与特点 - 掘金·  2 年前    · 
大鼻子的单车  ·  .NET 正则表达式中的字符类 | ...·  2 年前    · 
Code  ›  Oracle 将记录拆分为N行的组 - 墨天轮
https://www.modb.pro/db/92521
满身肌肉的领带
2 年前
  • 学习
    • 课程中心
      推荐优质内容、热门课程
    • 学习路径
      预设学习计划、达成学习目标
    • 知识图谱
      综合了解技术体系知识点
    • 课程库
      快速筛选、搜索相关课程
    • 视频学习
      专业视频分享技术知识
    • 电子文档
      快速搜索阅览技术文档
  • 文档
  • 服务
    • 智能助手小墨
      关于数据库相关的问题,您都可以问我
    • 数据库巡检平台
      脚本采集百余项,在线智能分析总结
    • SQLRUN
      在线数据库即时SQL运行平台
    • 数据库实训平台
      实操环境、开箱即用、一键连接
    • 数据库管理服务
      汇聚顶级数据库专家,具备多数据库运维能力
  • 暂无图片
    • 数据库百科
    • 核心案例
    • 行业报告
    • 月度解读
    • 大事记
    • 产业图谱
  • 我的订单
  • 登录后可立即获得以下权益
    免费培训课程
    收藏优质文章
    疑难问题解答
    下载专业文档
    签到免费抽奖
    提升成长等级
    立即登录
    登录 注册
      • 登录 注册
    • 首页
    • 资讯
    • 数说
    • 活动
    • 大会
    • 课程
    • 文档
    • 排行
    • 问答
    • 我的订单
    暂无图片
    • 首页
    • 专家团队
    • 智能助手
    • 在线工具
      • SQLRUN
        在线数据库即时SQL运行平台
      • 数据库在线实训平台
        实操环境、开箱即用、一键连接
      • AWR分析
        上传AWR报告,查看分析结果
      • SQL格式化
        快速格式化绝大多数SQL语句
      • SQL审核
        审核编写规范,提升执行效率
      • PLSQL解密
        解密超4000字符的PL/SQL语句
      • OraC函数
        查询Oracle C 函数的详细描述
      • 智能助手小墨
        关于数据库相关的问题,您都可以问我
    • 精选案例
    • 新闻资讯
    • 云市场
    登录后可立即获得以下权益
    免费培训课程
    收藏优质文章
    疑难问题解答
    下载专业文档
    签到免费抽奖
    提升成长等级
    立即登录
    登录 注册
      • 登录 注册
    • 首页
    • 专家团队
    • 智能助手
    • 精选案例
    • 新闻资讯
    • 云市场
    暂无图片
    暂无图片
    暂无图片
    微信扫码
    复制链接
    新浪微博
    分享数说
    暂无图片
    采集到收藏夹
    分享到数说
    首页 / Oracle 将记录拆分为N行的组

    Oracle 将记录拆分为N行的组

    ASKTOM 2020-09-23
    559

    问题描述

    从具有100,000记录的表中获得一个SQL,一个特定的varchar2字段包含诸如 “12345”,“56789”,“1111” 之类的字符串。
    我想用适当的逗号创建一个带有拆分/分块的表

    在实时链接中的示例 ::: 在组 (按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    
    
     
    推荐文章
    安静的水桶  ·  pdf.js viewer.js example-掘金
    2 年前
    捣蛋的长颈鹿  ·  深入探索透视纹理映射(下)_51CTO博客_纹理映射方法
    2 年前
    想出国的羽毛球  ·  使用<a>以特定属性为目标 - 问答 - 腾讯云开发者社区-腾讯云
    2 年前
    怕老婆的手套  ·  C++:内部类的概念与特点 - 掘金
    2 年前
    大鼻子的单车  ·  .NET 正则表达式中的字符类 | Microsoft Learn
    2 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号