一、问题描述

  有时在“相关子查询中”需要查询某个实体类对应的某个字段有多个值,如果不做行专列查询,会提示返回多个列的错误。例如:

  如上图所示,一个组合包,可能对应多个产品,需要你将所对应的多个产品都放到前台显示。

二、解决方法

  表结构设计如图:

  首先,我们这里采用相关子查询的方式来获取结果:

  组合包和产品是一对多的关系,故一个组合包可以对应多个产品:

select
(select listagg(pp.product_name,',') within group(order by pp.product_name)
from edu_group_product gpp,--组合包和产品关联表
edu_product pp--产品表
where gpp.group_id = gp.group_id
and gpp.product_id = pp.product_id
) products
from edu_group gp--组合包表
where gp.group_id = 1000;

  查询时间:

该函数结构:

LISTAGG(字段名,分隔符) WITHIN GROUP( ORDER BY 字段名)

三、说明

  1.想使用该函数,在本机的oracle上试了一会,发现总提示我“未找到要求的关键字”,反复核对关键字和字段名称,都无法解决。于是在服务器一个曾使用过该方法的表结构中尝试试用该方法,一次成功,瞬间明白可能是因为服务器版本不同的原因。一查果然啊:

select wm_concat(name) name from user;--10g写法
select listagg(name,',') within group (order by name) name from user;--11g写法

  2.使用wm_concat后果

select
(select wm_concat(pp.product_name)from edu_group_product gpp,--组合包和产品关联表
edu_product pp--产品表
where gpp.group_id = gp.group_id
and gpp.product_id = pp.product_id
) products
from edu_group gp--组合包表
where gp.group_id = 1000;

  同样的表结构,同样的查询要求,使用wm_concate()函数结果:

                

  试了几次,最快是3秒多,大并发量下,要死人的。

  同样,在10g的数据库中试用该方法耗时也很长。

   

oracle中行转列函数的更多相关文章

  1. oracle 行转列函数pivot和unpivot

    今天接到业务部门的一个需求,需要对同一公司的不同财务指标进行排序,需要用到oracle的行转列函数unpivot. 财务报表的表结构为: 要实现业务部门的排序筛选功能,需要首先将行数据转为列数据: 使 ...

  2. oracle中行转列、列转行函数

    多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str ...

  3. oracle行转列函数WMSYS.WM_CONCAT 用法

    1.通过 10g 所提供的 WMSYS.WM_CONCAT 函数即可以完成 行转列的效果 select group_code, wm_concat(display_title) from DR_OPM ...

  4. Oracle中行转列,列转行pivot的用法

    测试数据准备 --建表 --drop table SalesList; create table SalesList( keHu ), --客户 shangPin ), --商品名称 salesNum ...

  5. oracle行转列函数以及一些窗口函数(PIVOT ,OVER)

    可以查看博客园上传的文件 pivot  除了要转成列的字段(classnum,classid)值不一样,其他值都应该相同,否则转的数据有问题

  6. oracle行转列函数

  7. oracle中行转列操作

    数据准备阶段: CREATE TABLE CC  (Student NVARCHAR2(2),Course NVARCHAR2(2),Score INT); INSERT into CC   sele ...

  8. Oracle 行转列 动态出转换的列

    本文链接:https://blog.csdn.net/Huay_Li/article/details/82924443 10月的第二天,前天写了个Oracle中行转列的pivot的基本使用方法,然后, ...

  9. Oracle行转列,pivot函数和unpivot函数

    pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值)):unpivot函数:列转行函数: 语法:unpivot(新增值所在列的列名 for ...

随机推荐

  1. windows下mysql增量备份与全备份批处理

    win下的全备批处理 批处理用于游戏服务器,经过严格测试,且正式使用,主要用来完全备份数据库,当然.这只是将数备份出来 ,至于如何将备份出来的数据远程传送的远程服务器上可以调用ftp的功能,此脚本并未 ...

  2. [老老实实学WCF] 第六篇 元数据交换

    老老实实学WCF 第六篇 元数据交换 通过前两篇的学习,我们了解了WCF通信的一些基本原理,我们知道,WCF服务端和客户端通过共享元数据(包括服务协定.服务器终结点信息)在两个 终结点上建立通道从而进 ...

  3. HTML+CSS学习笔记 (14) - 单位和值

    标签:HTML+CSS 颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命 ...

  4. OpenGL第15,16,17讲小结

    这三讲没有什么特别的感觉,15讲把纹理贴到3D字体上,16讲讲了雾的生成,17讲是通过以事先保存好的纹理贴图的字体来显示2D文字,这样子不用调用windows的字体,而是使用纹理中的字体.这样也在一定 ...

  5. 创建本地Ubuntu镜像

    参考文档 http://www.howtoforge.com/local_debian_ubuntu_mirror 安装服务 : sudo apt-get install apt-mirror apa ...

  6. 解决iOS设备屏幕切换时页面造成的问题

    环境:IOS6~7 Safari 问题:iOS设备屏幕切换时可能会造成屏幕变大,出现左右间距等问题 解决方法: 头部加入<meta name = "viewport" con ...

  7. Silverlight C#动态设置样式

    1.从页面资源中获取样式并应用 btnTest.Style = (Style)this.Resources["BigButtonStyle"] 2.从项目中单独分开的资源字典文件( ...

  8. QA如何增强网站建设公司竞争力

    在上一篇文章<QA在网站建设公司中的作用>中我们已经详细说了QA的作用,不过有一点没有明确说明,也就是只有在超高速发展的网站建设公司中才会充分体现QA的价值.这并不是说在发展稳定的公司或低 ...

  9. 通过百度地图API定位--第三方开源--百度地图(一)

    1.把百度地图定位API(下载地址:http://lbsyun.baidu.com/sdk/download?selected=location)里面的libs复制到自己的项目libs里面 2.进行相 ...

  10. ASP.NET中的母版页机制

    项目中用到了母版页,由于好长时间没用了,不太熟悉起原理,在网上找了一下: http://www.cnblogs.com/_zjl/archive/2011/06/12/2078992.html 有时间 ...