原帖:http://www.cnblogs.com/nayitian/p/3231734.html

wmsys.wm_concat

Definition: The Oracle PL/SQL WM_CONCAT function is used to aggregate data from a number of rows into a single row, giving a list of data associated with a specific COMMENT_BODY. In effect, it cross-tabulates a comma delimited list.

Note that WM_CONCAT is undocumented and unsupported by Oracle, meaning it should not be used in production systems. The LISTAGG function, which can produce the same output asWM_CONCAT is both documented and supported by Oracle.

1. 现有数据结构

BBSDETAIL表(主表)

DETAIL_ID NOT NULL NUMBER  主键

TITLE NOT NULL VARCHAR2(100)

BBSCOMMENT表(从表)

DETAIL_ID NOT NULL NUMBER  外键

COMMENT_BODY NOT NULL VARCHAR2(500)

COMMENT_TIME NOT NULL DATE

2. 实现功能一(从表多行记录合并为一行,不要求排序)

--多行合并为一行,不要求排序

select DETAIL_ID,wmsys.wm_concat('{'||COMMENT_BODY||'}')

from BBSCOMMENT

group by DETAIL_ID;

输出:

13859 {东西好,送货快 },{好 },{物流有些慢 }

14938 {卖家还是挺热心的,以后再来 },{东西不错 }

3. 实现功能二(从表多行记录合并为一行后,与主表做一连接)

--将上述SQL语句与主表做一个连接查询

select bd.DETAIL_ID,TITLE,bcm.COMMENT_INFO

from BBSDETAIL bd,(select DETAIL_ID,wmsys.wm_concat('{'||COMMENT_BODY||'}') as COMMENT_INFO from BBSCOMMENT group by DETAIL_ID) bcm

where bd.DETAIL_ID=bcm.DETAIL_ID(+);

输出:

13859 苏泊尔电压力锅配件 {东西好,送货快 },{好 },{物流有些慢 }

14938 Nike/耐克男性跑步鞋跑步 {卖家还是挺热心的,以后再来 },{东西不错 }

4. 实现功能三(从表多行记录合并为一行,并按评价时间排序)

--多行合并为一行,要求排序(最新的评论在前面)

select DETAIL_ID, max(r)

from (select DETAIL_ID, wmsys.wm_concat(COMMENT_BODY||'('||to_char(COMMENT_TIME,'yyyy-mm-dd hh:mi:ss')||')')

OVER(PARTITION BY DETAIL_ID ORDER BY COMMENT_TIME desc) r from BBSCOMMENT)

group by DETAIL_ID;

输出:

13859 东西好,送货快(2013-02-19 06:27:37),好(2012-01-14 02:23:46),物流有些慢(2012-01-01 12:00:25)

14938 卖家还是挺热心的,以后再来(2011-11-27 05:28:27),东西不错(2011-10-11 05:09:06)

5. 实现功能四(行变列:分两列显示从表两种汇总结果,排序,并保证两列中数据的对应关系)

--分两列显示两种汇总结果,并排序,保证对应关系

select DETAIL_ID,COMMENT_TIME,COMMENT_BODY from (

select

DETAIL_ID,

WMSYS.WM_CONCAT(to_char(COMMENT_TIME,'yyyy-mm-dd hh:mi:ss'))

OVER(PARTITION BY DETAIL_ID ORDER BY COMMENT_TIME) COMMENT_TIME,

WMSYS.WM_CONCAT('{'||COMMENT_BODY||'}')

OVER(PARTITION BY DETAIL_ID ORDER BY COMMENT_TIME) COMMENT_BODY,

row_number() OVER(PARTITION BY DETAIL_ID ORDER BY COMMENT_TIME desc) rs

from BBSCOMMENT) where rs=1;

输出:

13859 2013-02-19 06:27:37,2012-01-14 02:23:46,2012-01-01 12:00:25 {东西好,送货快},{好},{物流有些慢}

14938 2011-11-27 05:28:27,2011-10-11 05:09:06 {卖家还是挺热心的,以后再来},{东西不错}

多个值合并成一个字段oracle排序,Oracle之多行记录变一行记录,行变列,并排序(wmsys.wm_concat)...相关推荐

  1. oracle数据列转行排序,oracle 列转行函数 WMSYS.WM_CONCAT 排序不规则处理

    业务中做报表,需要将一列列数据汇总成一行,然后汇总,如下: 需要将每个产品进行汇总,通过ichartjs进行展示,图表中需要数据的顺序是: var data = [ { name : '产品1', v ...

  2. [Pandas技巧] 多列值合并成一列

    美图欣赏2022/07/28 在平时的需求开发中涉及到将多列值合并为一列值的操作,通过查阅相关资料特此记录以下方法,方便日后学习复盘 import pandas as pd import numpy ...

  3. 一对多查询,合并成一条数据

    一对多查询,合并成一条数据 举例:一个产品对应多个型号,把多个型号查询出来显示在一个字段下面.显示出一条数据. 步骤: 1:创建产品表: 2:创建型号表: 思路: 先写出不含产品型号的查询语句, 然后 ...

  4. group by很多字段是不是会很慢_3分钟短文 | MySQL在分组时,把多列合并为一个字段!

    引言 今天我们来说一个MySQL查询的例子,比如有一个统计需求, 分组后的数据,我们知道只能使用聚合函数进行统计, 那如果要根据分组约定,将一系列的值合并到单个字段显示出来, 应该怎么写呢? 学习时间 ...

  5. 两个无序单链表,排序后合并成一个有序链表

    两个无序单链表,排序后合并成一个有序链表 算法思想:用冒泡法,对链表1和2进行排序,对排序后的两个链表,从小到大进行循环,装入链表3中. #include<stdio.h> #includ ...

  6. 不入oracle数据库,Oracle数据库之操作符及函数

    一.操作符: 1.分类: 算术.比较.逻辑.集合.连接: 2.算术操作符: 执行数值计算: --工资加1000 select empno,ename,job,sal+1000 from emp; 3. ...

  7. oracle内置函数 wmsys.wm_concat使用

    函数名:wmsys.wm_concat 作用:以逗号分隔连接列的值 oracle 10g引入.使用时直接用wm_concat也可以. 以下介绍一些实际使用的状况.介绍实际Case前先建立一个测试tab ...

  8. 【Oracle】Oracle GoldenGate简介及搭建过程

    GoldenGate公司简介 GoldenGate公司专注于数据同步领域,是实现数据同步技术的领导者.至2007年,在全球35个国家售出超过2000个许可证,客户分布在政府.银行.电信.证券.传媒.医 ...

  9. oracle 11 wm concat,【Oracle开发】关于11.2上WMSYS.WM_CONCAT的workaround

    有很多人问关于新版本中WMSYS.WM_CONCAT函数无法使用的问题. 对于该函数,Oracle官方的态度是其从来没有将该函数列入任何官方文档中,这个函数仅仅是让Oracle Dev研发在针对内部对 ...

最新文章

  1. Ubuntu12.04 安装MySQL简单步骤
  2. MySQL 第七天(核心优化一)
  3. python中title用法_在CSV fi中使用Title()
  4. Chrome 将内置 QR 扫码共享页面功能
  5. mysql导出excel出乱码_Mysql中文乱码以及导出为sql语句和Excel问题解决方法[图文]...
  6. C#.NET分别以GET和POST方式抓取远程页面
  7. RocketMq在windows下安装
  8. [译]利用贝叶斯推理做硬件故障率的准实时预测
  9. 世界上最好玩的6种表情符号编程语言
  10. 宋宝华:为了不忘却的纪念,评Linux 5.13内核
  11. 电动机正反转继电器控制系统
  12. linux中如何升级驱动程序,Redhat 如何升级显卡驱动?
  13. 手机RAM、ROM和储存卡的那些事
  14. 获取高德POI(关键词搜索法 多边形搜索法 周边搜索法)综合运用 2022新版高德poi下载
  15. c语言三种循环结构特点,c语言循环结构(c语言循环结构特点)
  16. Uber Go 语言编程规范:使用 go.uber.org/atomic
  17. 操作系统——可变分区空闲空间管理
  18. 内网渗透思路10之SPN拿下域控
  19. flink 相关资料
  20. [Alpha] Scrum Meeting 6 - TEAM LESS ERROR

热门文章

  1. 辨异 —— 单词(同义词)的辨异
  2. Python技巧——list comprehension 与 functools.reduce
  3. join left semi_Hive的left join、left outer join和left semi join三者的区别
  4. python装饰器带参数函数_python带参数装饰器的两种写法
  5. 找出最具竞争力的子序列_每日算法系列【LeetCode 376】摆动序列
  6. python公开课免费-公开课 | Python大牛免费带你4天入门Python
  7. python画三维图-Python基于matplotlib实现绘制三维图形功能示例
  8. python和c语言的区别-C语言、Java语言和python语言的区别在哪里
  9. 在线语音识别_腾讯云在线语音识别_在线语音识别成文字 - 云+社区 - 腾讯云
  10. www.yaxjf.com+m.php,linux运维架构--PHP开发-零基础学习PHP视频教程