项目中遇到一个需求,需要将多行合并为一行。
表结构如下:
NAME                            Null           Type
------------------------ ---------   -----
N_SEC_CODE                 NOT NULL CHAR(6)
C_RESEARCHER_CODE    NOT NULL VARCHAR2(20)

此表保存了“股票”与“研究员”的对应关系数据,一般而言,对于同一只股票而言,可能有多个研究员
对其进行跟踪研究。所以目前遇到一个要求,需查询出每只股票和对应的研究员(研究员代码间,使用逗号分隔)。
例如有如下数据:
000297                                   chenpeng           
000297                                   liusu              
合并处理后需显示为:
000297                                   chenpeng,liusu

网上查了很多方法,但通常而言都是编写自定义多行文本合并函数,或者对支持的列数具有局限性。
最后在英文google中搜到如下比较巧的方法。不用在数据库中增加function,纯SQL一次性搞定,
而且扩充性很好,没有列的限制。

Code
SELECT    n_sec_code, TRANSLATE (LTRIM (text, '/'), '*/', '*,') researcherList
    FROM (SELECT ROW_NUMBER () OVER (PARTITION BY n_sec_code ORDER BY n_sec_code,
                   lvl DESC) rn,
                  n_sec_code, text
            FROM (SELECT      n_sec_code, LEVEL lvl,
                              SYS_CONNECT_BY_PATH (c_researcher_code,'/') text
                        FROM (SELECT    n_sec_code, c_researcher_code as c_researcher_code,
                                        ROW_NUMBER () OVER (PARTITION BY n_sec_code ORDER BY n_sec_code,c_researcher_code) x
                                  FROM m_researcher_stock_rel
                              ORDER BY n_sec_code, c_researcher_code) a
                   CONNECT BY n_sec_code = PRIOR n_sec_code AND x - 1 = PRIOR x))
   WHERE rn = 1
ORDER BY n_sec_code;

预想的结果成功出现,多行数据成功汇总到一行,特此分享与大家。对于你自己的应用中,只需要把SQL中“n_sec_code”
换为你的用来汇总的列,“c_researcher_code”替换为需合并文本的列,“m_researcher_stock_rel”替换为你的表名,就是这么简单。

SQL分析:
1、利用 “ROW_NUMBER () OVER (PARTITION BY……” 为按“股票代码”汇总后的数据行添加组内序号
2、“SYS_CONNECT_BY_PATH” 按组内序号相邻关系,为每一层进行不同行的“研究员代码”叠加
3、再次利用“股票代码”进行组内分组,但按第二部中的层次排倒序,增加调整后等级
4、取所有调整后等级为1的结果,即为所要求的数据行

转载于:https://www.cnblogs.com/tiantangwater/archive/2011/12/10/2283157.html

ORACLE纯SQL实现多行合并一行【转】相关推荐

  1. ORACLE纯SQL实现多行合并一行

    ORACLE纯SQL实现多行合并一行 项目中遇到一个需求,需要将多行合并为一行. 表结构如下: NAME                            Null           Type ...

  2. Oracle 多行合并一行 方法

    http://lovejuan1314.iteye.com/blog/413694 NOTE:特别声明一下内容转自网络 http://www.ningoo.net/html/2008/how_to_d ...

  3. Oracle的 listagg 函数,多行合并一行

    转自:https://blog.csdn.net/Huay_Li/article/details/81257655 --创建学校类型-年级表 create table SchoolGrade(scho ...

  4. easyui一行显示多行_easyui datagrid以及oracle中的多行合并一行

    页面显示: 前端代码: toolbar="#toolbar" rownumbers="true" singleSelect="true" f ...

  5. pandas多行合并一行_Pandas函数妙用

    ❝ 文章来源:towardsdatascience 作者:Soner Yıldırım 翻译\编辑:Python大数据分析 ❞ 看标题是否似曾相似?之前为大家介绍过10个高效的pandas函数,颇受欢 ...

  6. SQL技巧(多行合并一列)

    DECLARE @NAMES VARCHAR(1000) SELECT @NAMES = ISNULL(@NAMES+',','')+ColumnCode FROM  DB_TableColumns  ...

  7. oracle纯SQL更新插入clob类型字段

    句式: declarebname clob := 'select * from (SELECTorder by ad_code'; beginupdate dsy_t_query set Q_TABL ...

  8. mysql和sqlserver共存_mysql 和sqlserver的 多行合并成一行

    mysql 和sqlserver的 多行合并成一行 mysql  多行合并: mysql 内置函数 group_concat(exper  SEPARATOR " " ) expe ...

  9. [Oracle]行列转换(行合并与拆分)

    使用wmsys.wm_concat 实现行合并 在 Oracle  中, 将某一个栏位的多行数据转换成使用逗号风格的一行显示,可以使用函数  wmsys.wm_concat 达成. 这个在上一篇 or ...

  10. php表格增加一行数据,““vb中数据库内容输出到excel如何把表格第一行合并添加一个大标题...

    excel表格上面和下面都有行怎么在中间添加一行 excel表面和下面都有行怎么在中间添加一行的方法如下: 1.打开要处理的文档, 2.标定位到要插入的位置之后,比如要在2,3行之间插入,就定位到第3 ...

最新文章

  1. ptrace原理与性能对比
  2. hvie struct 怎么查训_hive的数据类型
  3. php显示表格,php – 显示所有表格行
  4. Java学习进阶—高级编程
  5. “别了,小黄文” 微信打击低俗小说:2019年处理违规账号6.6万+
  6. CSS知识点补充收集
  7. java.io.StreamCorruptedException: invalid stream header: 00000000
  8. 我也说说刘谦在2010年春晚上的魔术作假
  9. javascript里的document.all用法收集
  10. python 人体建模_Matplotlib学习---可视化人体姿态
  11. 利用js+html做一个简单的体脂率计算
  12. github上传本地项目简单方式记录一
  13. Linux网络流量监控工具
  14. 【探花交友】今日佳人
  15. 正式发布!Matlab配色神器TheColor
  16. 自定义Android视频播放器 - 切换横竖屏
  17. 取消计算机系统密钥,BitLocker驱动器被加密怎么恢复密钥 忘了密码取消删除方法...
  18. excel系列【下拉项二选一】
  19. 如何成为不可替代的程序员?掌握这个方法,裁员名单永远没有你
  20. 动态时间规整DWT(Dynamic Time Warping)

热门文章

  1. *第二周*数据结构实践项目一【交换】
  2. 项目总结(四)邮件订阅
  3. Node.js之图片上传
  4. 解决Robot Framework运行时没有Log的方案
  5. 后缀数组模板 (详细注释)
  6. Puppent 介绍原理及安装
  7. IP defragment
  8. java常用类、最常用的包
  9. 邮箱服务器端口以及各大型邮箱smtp服务器及端口收集
  10. ES6的promise对象应该这样用