oracle多行合并一行,且需排序

摘要:
暂时看这个方法的效率不是很好。
oracle多行合并一行,且需排序第1张oracle多行合并一行,且需排序第2张View Code
SELECTlotid,
ltrim(MAX(sys_connect_by_path(wf_lotno,',')),',')wf_lotno,
ltrim(MAX(sys_connect_by_path(wf_jobno,',')),',')wf_jobno,
ltrim(MAX(sys_connect_by_path(wf_partno,',')),',')wf_partno,
ltrim(MAX(sys_connect_by_path(supplier,',')),',')supplier,
ltrim(MAX(sys_connect_by_path(wf_id,',')),',')wf_id
FROM(SELECTlotid,
wf_lotno,
wf_jobno,
wf_partno,
supplier,
wf_id,
MIN(wf_id)over(PARTITIONBYlotid)wf_id_min,
(row_number()
over(ORDERBYlotid,wf_id))+
(dense_rank()
over(ORDERBYlotid))wf_id_count
FROM(SELECTlotid,
wf_lotno,
wf_jobno,
wf_partno,
supplier,
to_string(
CAST(COLLECT(wf_id)ASvarchar2_ntt))ASwf_id
FROMdio_yld_wf_inf_w
WHERElotid='B737756.D1'GROUPBYlotid,
wf_lotno,
wf_jobno,
wf_partno,
supplier))
START
WITHwf_id=wf_id_min
CONNECT
BYwf_id_count-1=PRIORwf_id_count
GROUPBYlotid;

第一层:相同wf_lot先合并一次。

比如

lotid wf_lot wf_id

10 a 5

10 a 6

10 b 7

11 a 8

11 b 9

12 a 10

第一层结果为

10 a 5 / 6

10 b 7

11 a 8

11 b 9

12 a 10

希望达到的最终效果:

10 a,b 5 / 6,7

11 a,b 8,9

12 a 10

注意: 10这一行不能是:

10 a,b 7,5 / 6

10 b,a 5 / 6, 7

要按顺序排列。

暂时看这个方法的效率不是很好。


后面改进了一下:

SELECTlotid,
MAX(wf_lotno)wf_lotno,
MAX(wf_jobno)wf_jobno,
MAX(wf_partno)wf_partno,
MAX(supplier)supplier,
MAX(wf_id)wf_id
FROM(SELECTt.lotid,
wmsys.wm_concat(t.wf_lotno)
over(PARTITIONBYt.lotidORDERBYt.lotid,t.wf_lotno)wf_lotno,
wmsys.wm_concat(t.wf_jobno)
over(PARTITIONBYt.lotidORDERBYt.lotid,t.wf_jobno)wf_jobno,
wmsys.wm_concat(t.wf_partno)
over(PARTITIONBYt.lotidORDERBYt.lotid,t.wf_lotno,t.wf_jobno)wf_partno,
wmsys.wm_concat(t.supplier)
over(PARTITIONBYt.lotidORDERBYt.lotid,t.wf_lotno,t.supplier)supplier,
wmsys.wm_concat(t.wf_id)
over(PARTITIONBYt.lotidORDERBYt.lotid,t.wf_lotno,t.wf_id)wf_id
FROM(SELECTlotid,
wf_lotno,
wf_jobno,
wf_partno,
supplier,
to_string(
CAST(COLLECT(wf_id)ASvarchar2_ntt))ASwf_id
FROMdio_yld_wf_inf_w
/*WHERElotid='B737756.D1'*/GROUPBYlotid,
wf_lotno,
wf_jobno,
wf_partno,
supplier)t)
GROUPBYlotid;

继续改进:

SELECTlotid,
MAX(wf_lotno)wf_lotno,
MAX(wf_jobno)wf_jobno,
MAX(wf_partno)wf_partno,
MAX(supplier)supplier,
MAX(wf_id)wf_id
FROM(SELECTt.lotid,
wmsys.wm_concat(t.wf_lotno)
over(PARTITIONBYt.lotidORDERBYt.lotid,t.wf_lotno)wf_lotno,
wmsys.wm_concat(t.wf_jobno)
over(PARTITIONBYt.lotidORDERBYt.lotid,t.wf_jobno)wf_jobno,
wmsys.wm_concat(t.wf_partno)
over(PARTITIONBYt.lotidORDERBYt.lotid,t.wf_lotno,t.wf_jobno)wf_partno,
wmsys.wm_concat(t.supplier)
over(PARTITIONBYt.lotidORDERBYt.lotid,t.wf_lotno,t.supplier)supplier,
wmsys.wm_concat(t.wf_id)
over(PARTITIONBYt.lotidORDERBYt.lotid,t.wf_lotno,t.wf_id)wf_id
FROM(SELECTlotid,
wf_lotno,
wf_jobno,
wf_partno,
supplier,
to_string(
CAST(COLLECT(wf_id)ASvarchar2_ntt))ASwf_id
FROMdio_yld_wf_inf_w
/*WHERElotid='B737756.D1'*/GROUPBYlotid,
wf_lotno,
wf_jobno,
wf_partno,
supplier)t)
GROUPBYlotid;

最后由原来20s降低到4s。

免责声明:文章转载自《oracle多行合并一行,且需排序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何使用OpenCL编写程序wekan 工具配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

RF(一)RF的安装步骤

7.安装Appium 8,安装最新版本的nodeJS:node-v6.9.49,在命令行上执行Appium命令,您应该能够启动Appium服务器~~~~...

Makefile系列之三 : 变量

第二个语法是针对于make命令行带入的变量,或是系统环境变量。...

docker默认网段和主机网段冲突解决

一、docker默认网卡docker0172.17.0.0可能会与主机冲突,这时候需要修改docker默认分配的网段1、修改/etc/docker/daemon.json文件,加入以下代码{"default-address-pools":[{"base":"172.100.0.0/16","size":24}]}其中上面的172.100.0.0/16是自定义...

调用钉钉接口发送消息

1.首先登录指甲显影剂后台https://ding-doc.dingtalk.com/2.选择H5微应用程序创建应用程序;2stringappsecret=“kKsIwqEQJHt3mW69opU6RO9...

uniapp原生插件开发及打包发布

二.调试原生插件:1.使用hx创建uniapp项目2.创建vue页面或者nvue,在js中第一行获取插件对象vartestModule=uni.requireNativePlugin3.然后使用插件对象就可以调用到插件中的方法4.在hx上的菜单上:发行-原生app-本地打包-生成本地app打包资源;5.打包完成会在控制台上输出打包信息,我们关注的是打包路径;...

STM32程序中使用printf打印中文字符乱码

STM32程序printf将汉字打印到串口以解决乱码问题作者:有些学生在编写SCM程序时喜欢使用printf将相关信息打印到串口,然后在串口调试助手中观察数据变化。然而,当我使用printf打印汉字时,串口助手出现了乱码。检查后,这不是波特率问题。因为每次在CubeMX配置完成后生成代码时,默认情况下IAR都是以UTF-8编码的,这导致了中文乱码。...