相关文章推荐
被表白的大葱  ·  陕西省铜川:厚植“好人之城”沃土,激活治理内 ...·  1 年前    · 
从未表白的茄子  ·  近 30 ...·  1 年前    · 
深情的伤疤  ·  女子十二乐坊大换血 ...·  1 年前    · 
面冷心慈的花卷  ·  仙界第一卧底观看,全集评论,短视频,在线免费 ...·  2 年前    · 
讲道义的茴香  ·  吴瑞夫人:“你见过我的瑞?” | ...·  2 年前    · 
Code  ›  Oracle 将列中的逗号分隔值转换为行,并将结果集与另一个表连接 - 墨天轮
https://www.modb.pro/db/200506
高大的金针菇
2 年前
  • 学习
    • 课程中心
      推荐优质内容、热门课程
    • 学习路径
      预设学习计划、达成学习目标
    • 知识图谱
      综合了解技术体系知识点
    • 课程库
      快速筛选、搜索相关课程
    • 视频学习
      专业视频分享技术知识
    • 电子文档
      快速搜索阅览技术文档
  • 文档
  • 服务
    • 智能助手小墨
      关于数据库相关的问题,您都可以问我
    • 数据库巡检平台
      脚本采集百余项,在线智能分析总结
    • SQLRUN
      在线数据库即时SQL运行平台
    • 数据库实训平台
      实操环境、开箱即用、一键连接
    • 数据库管理服务
      汇聚顶级数据库专家,具备多数据库运维能力
  • 暂无图片
    • 数据库百科
    • 核心案例
    • 行业报告
    • 月度解读
    • 大事记
    • 产业图谱
  • 我的订单
  • 登录后可立即获得以下权益
    免费培训课程
    收藏优质文章
    疑难问题解答
    下载专业文档
    签到免费抽奖
    提升成长等级
    立即登录
    登录 注册
      • 登录 注册
    • 首页
    • 资讯
    • 数说
    • 活动
    • 大会
    • 课程
    • 文档
    • 排行
    • 问答
    • 我的订单
    暂无图片
    • 首页
    • 专家团队
    • 智能助手
    • 在线工具
      • SQLRUN
        在线数据库即时SQL运行平台
      • 数据库在线实训平台
        实操环境、开箱即用、一键连接
      • AWR分析
        上传AWR报告,查看分析结果
      • SQL格式化
        快速格式化绝大多数SQL语句
      • SQL审核
        审核编写规范,提升执行效率
      • PLSQL解密
        解密超4000字符的PL/SQL语句
      • OraC函数
        查询Oracle C 函数的详细描述
      • 智能助手小墨
        关于数据库相关的问题,您都可以问我
    • 精选案例
    • 新闻资讯
    • 云市场
    登录后可立即获得以下权益
    免费培训课程
    收藏优质文章
    疑难问题解答
    下载专业文档
    签到免费抽奖
    提升成长等级
    立即登录
    登录 注册
      • 登录 注册
    • 首页
    • 专家团队
    • 智能助手
    • 精选案例
    • 新闻资讯
    • 云市场
    暂无图片
    暂无图片
    暂无图片
    微信扫码
    复制链接
    新浪微博
    分享数说
    暂无图片
    采集到收藏夹
    分享到数说
    首页 / Oracle 将列中的逗号分隔值转换为行,并将结果集与另一个表连接

    Oracle 将列中的逗号分隔值转换为行,并将结果集与另一个表连接

    askTom 2018-08-27
    958

    问题描述

    我有一张下面的表

    R_ID R_Site R_Name R_Role
    -
    1 123,-456,-789 qwer所有者
    2 56,-741-852 qaz经理
    3 369,-741,-987 wsx员工
    4所有eddc员工
    5名所有rfv员工

    并使用下面的查询将R_Site逗号分隔的值转换为行

    选择REGEXP_SUBSTR (txt,'[^,]',1,级别) 作为站点,R_NAME
    从 (选择不同的R_SITE作为txt,从MY_TABLE中选择R_NAME
    按级别连接 <= 长度 (regexp_replace(txt,'[^,] *')) 1

    现在,我需要将上述结果集连接到R_SITE(SITE) = S_SITE上的下表,以在最终结果中获取S_Sal值

    S_ID s_s_s_mgr
    ----- ------ -----
    1 -789 10000 Raghu
    2 -123 20000马赫什
    3 -456 300000 Swetha
    4 -147 400000 Vamsi
    5所有500000纳伦德拉

    但是当我加入时,数据库一直在旋转,没有给出任何结果。

    您能否让我知道我是否在任何步骤中做错了,以及纠正它的方法。

    SQL更新:
    ---------
    源表
    创建表MY_TABLE (
    R_ID int,
    R_Site varchar(255),
    R_Name varchar(255),
    角色varchar(255)
    );

    插入到MY_TABLE(R_ID,R_Site,R_Name,R_Role)
    值 ('1','123,-456,-789 ','qwer','Owner');

    插入到MY_TABLE(R_ID,R_Site,R_Name,R_Role)
    值 ('2','56,-741,-852 ','qaz','Manager');

    将逗号分隔的字符串拆分为行后,我希望得到如下表所示的结果

    创建表MY_TABLE (
    R_ID int,
    R_Site varchar(255),
    R_Name varchar(255),
    角色varchar(255)
    );

    插入到MY_TABLE(R_ID,R_Site,R_Name,R_Role)
    值 (“1” 、 “123” 、 “qwer” 、“ 所有者 ”);
    插入到MY_TABLE(R_ID,R_Site,R_Name,R_Role)
    值 ('1','-456,','qwer','Owner');
    插入到MY_TABLE(R_ID,R_Site,R_Name,R_Role)
    值 ('1','-789','qwer','Owner');
    插入到MY_TABLE(R_ID,R_Site,R_Name,R_Role)
    值 ('2','56','qaz','Manager');
    插入到MY_TABLE(R_ID,R_Site,R_Name,R_Role)
    值 ('2','-741','qaz','Manager');
    插入到MY_TABLE(R_ID,R_Site,R_Name,R_Role)
    值 ('2','-852','qaz','Manager');

    我能够通过使用常规exp并按级别连接来有效地实现这一目标。但是我想在ASCI标准中有一个解决方案。

    提前谢谢。





    感谢您将其放入SQL中,以便我们可以使用它。

    即使您将版本设置为 “18”,我也将假定这是SQL开发人员版本,因此这里可以在11g中使用。如果您对逗号数的计算错误,则通常会产生旋转查询,因此最终将永远 “连接”。我们可以使用cast/multisset来获取每行 * 的逗号数,以避免这种情况

    SQL> CREATE TABLE MY_TABLE(
      2  R_ID int,
      3  R_Site varchar(20),
      4  R_Name varchar(20),
      5  R_Role varchar(20)
      6  );
    Table created.
    SQL> INSERT INTO MY_TABLE(R_ID , R_Site , R_Name , R_Role )
      2  VALUES ('1' , '123,-456,-789', 'qwer' , 'Owner');
    1 row created.
    SQL> INSERT INTO MY_TABLE(R_ID , R_Site , R_Name , R_Role )
      2  VALUES ('2' , '56,-741,-852', 'qaz' , 'Manager');
    1 row created.
    SQL> select
      2    t.r_id,
      3    t.r_name,
      4    t.r_role,
      5    regexp_substr(t.R_Site, '[^,]+', 1, commas.column_value)  as site
      6  from
      7    MY_TABLE t,
      8    table(cast(multiset(select level from dual connect by  level <= length (regexp_replace(t.R_Site, '[^,]+'))  + 1) as sys.OdciNumberList)) commas
      9  order by 1,2,3,4;
          R_ID R_NAME                                                       R_ROLE                                                       SITE
    ---------- ------------------------------------------------------------ ------------------------------------------------------------ --------------------
             1 qwer                                                         Owner                                                        -456
             1 qwer                                                         Owner                                                        -789
             1 qwer                                                         Owner                                                        123
             2 qaz                                                          Manager                                                      -741
             2 qaz                                                          Manager                                                      -852
             2 qaz                                                          Manager                                                      56
    6 rows selected.
    


    从那时起,该结果集就像任何其他表一样,因此,如果您想与其他表连接,wave子句将使其保持简单,即

    with my_Results as 
    select
      t.r_id,
      t.r_name,
      t.r_role,
      regexp_substr(t.R_Site, '[^,]+', 1, commas.column_value)  as site
      MY_TABLE t,
      table(cast(multiset(select level from dual connect by  level <= length (regexp_replace(t.R_Site, '[^,]+'))  + 1) as sys.OdciNumberList)) commas
    select ...
    from   my_results,
    
     
    推荐文章
    被表白的大葱  ·  陕西省铜川:厚植“好人之城”沃土,激活治理内生动力_中华人民共和国最高人民检察院
    1 年前
    从未表白的茄子  ·  近 30 年戴镜史,分享我的配镜方法和粗浅经验 - 少数派
    1 年前
    深情的伤疤  ·  女子十二乐坊大换血 老成员仅剩一人_影音娱乐_新浪网
    1 年前
    面冷心慈的花卷  ·  仙界第一卧底观看,全集评论,短视频,在线免费观看 - 快看漫画
    2 年前
    讲道义的茴香  ·  吴瑞夫人:“你见过我的瑞?” | 王丹红专栏 - 知乎
    2 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号