2015.12.24(圣诞节)解决oralce数据库将具有相同属性的多行合并为一行的简单方法多年想要wmsys.wm_concat

mol1995 mol1995     2022-08-09     796

关键词:

用到Oralce10g以后增加的函数wmsys.wm_concat

技术分享

例如这张表的有两个字段,要按airport_id合并成两行可用sql语句

select airport_id,   wmsys.wm_concat( account) from AIRPORT_MODIFY group by airport_id

结果为:

 技术分享

非常简单,美中不足的是合并结果没有排序,解决排序问题最简单的办法就是在合并列前加上distinct

 技术分享

此外,如果合并列结果出现乱码,需要在合并列前加上to_char(),如wmsys.wm_concat( to_char(account)),据说是因为该函数在不同的Oracle版本中会返回varchar2或CLob两种结果

 

2016.8.15补充,关于排序

按wmsys.wm_concat(distinct account)排序只能实现按account文本排序,无法实现按某复杂逻辑排序。下面是实现方法

有普通sql如下

select flt,srtnum,seg,tran_level,name

from flight_tran_direction                    

where seg>0

order by flt,seg,srtnum

结果为:列举所有航线中,高度层反配的所有点

 技术分享

要实现按flt,seg分组并按srtsum排序的各点串,可写sql为

select flt,seg,tran_level,

WMSYS.WM_CONCAT(name) OVER(PARTITION BY flt,seg ORDER BY srtnum) KEY

from flight_tran_direction                    

where seg>0

order by flt,seg

结果为:类似于group by flt,seg实现了按flt,seg分组,且name按srtnum逻辑排序。唯一不足的是一个分组会多出若干历史行。实际上只需要每组最后一行。

 技术分享

改进sql为:外面再嵌套一层groupby结构,通过max实现取最多的合并列

select flt,seg,max(key) rt

from

 (

 select flt,seg,tran_level,

 WMSYS.WM_CONCAT(name) OVER(PARTITION BY flt,seg ORDER BY srtnum) KEY

 from flight_tran_direction                    

 where seg>0

 order by flt,seg

)

group by flt,seg,tran_level

结果为:

 技术分享

甚至反过按合并列rt分组,组合flt

select rt,tran, WMSYS.WM_CONCAT( distinct flt)

from

(

select flt,seg,

case mod(to_number(regexp_substr(tran_level,‘^[[:digit:]]+‘)),2) when 1 then ‘西单‘ else ‘东双‘ end tran,

replace(max(key),‘,‘,‘-‘) rt

from

(

select flt,seg,tran_level,

WMSYS.WM_CONCAT(name) OVER(PARTITION BY flt,seg ORDER BY srtnum) KEY

from flight_tran_direction                    

where seg>0

order by flt,seg

)

group by flt,seg,tran_level

)

group by rt,tran

order by rt,tran

技术分享

oralce断连后不自动断开问题

...cle数据库,有时未断开,服务端中一直积累了连接数 解决方法:一、调整允许连接的最大数方法一:用PLSQL或TOAD打开SDE用户下的表SEVER_CONFIG,编辑字段CON 查看详情

pb连接oralce数据库方法

本地必须配置连接服务      查看详情

oralce入门学习(代码片段)

oracle的认识1.database数据库2.数据文件:数据库的数据是存储在表空间中的,有多个文件组成3.表空间一个库被分为多个表空间,一个数据文件只能属于一个表空间 sql数据库语言1.DML(数据库操作语言)其中包括insert,update,delete2.DDL(数... 查看详情

节日edm系列:圣诞节如何进行edm数据营销

...体验已成为影响消费的重要因素。圣诞将至,如何才能将圣诞节EDM数据营销的效果发挥到极致?① 节日元素创意融合,高辨识度加深品牌认知消费者们的“感动成本”攀升,千篇一律的节日祝福以及节日促销已经远远... 查看详情

oralce11grac启动后crs-0184:cannotcommunicatewiththecrsdaemon.

...,集群服务才能准备就绪!!!文末,有一篇其他情况的解决方式。[[email protecte 查看详情

oralce数据库创建同义词

导语:我们不想在我们的基础平台数据库里面添加业务表格,那么我们就需要重新创建一个新的数据库,用同义词关联两个数据库。V6为基础数据库,RT为业务数据库,RT中有一张表BOOK_COUNT_MONTH那么在V6里面创建同义词,SQL如下:... 查看详情

oralce中相关的概念整理

【数据库名】 概念:就是一个数据库的标识,作用等同于我们的身份证的作用,假设一台机器上安装了多个数据库,那么每一个数据库都会有一个数据库名称相应,这些数据库名称在数据库被创建的时候,数据库名称也会被... 查看详情

oralce导出空表,扩展表空间(代码片段)

解释说明:由于Oracle的Rowid使用22位来代表数据块号,因此Oracle表空间数据文件每个数据文件最多只能包含2^22个数据块。也因此数据库表空间的数据文件不是无限增长的,例如:在数据块为8k的情况下,单个数据文件的最大容量... 查看详情

修改oralce数据库用户名和密码

首先以sys用户登录数据库一、修改用户名查到到所需修改用户名称的用户需要:selectuser#,namefromuser$;(例如查到有一个normal的用户对应的user#=61)修改normal用户名称:updateuser$setname=‘新的用户名称‘whereuser#=61; 最后commit;二、... 查看详情

oralce用户和表空间

...通用户)1.1查看登录用户:1)showuser查看当前登录的用户2)数据字典dba_users3)解锁用户:  1、以oracle用户登录Oracle服务器  2、连接数据库 >sqlplus/assysdba   3、检查Oracle数据库用户的密码是否被锁定 SQL>selectLOCK_ 查看详情

oralce菜鸟入门

linux安装oralce11g登录 sqlplus/assysdba1,启动数据库  startup 2,启动监听exit,lsnrctlstart3,  查看监听状态 lsnrctlstatus4,查询临时表空间------   查询临时表空间文件的绝对路径。如果需要的话,可以通... 查看详情

oralce4

--查询视图信息dba_views--包含数据库所有视图的信息all_views--包含当前用户可以访问的所有视图的信息user_views--包含当前用户拥有的所有视图的信息dba_updatable_columns--包含数据库中所有视图中可更新列的信息all_updatable_columns--包含... 查看详情

oralce修改表操作(代码片段)

...e_nameaddcolumn_namecolumn-definition;eg:添加customer_name这么一列,数据类型为 查看详情

oralce9i部署安装

为什么还学习oracle9i,因为目前大多数企业的数据依然存储在oracle9i上面,对于数据升级存在很大风险,因此在学习oralce之前,首先熟悉oracle9i也是很有必要的。现在我们先来学习oracle9i的安装一、先决条件1、系统centos4.52、相关rp... 查看详情

oralce定时任务

...一种是:操作系统的定时,win的定时任务,unix的crontab一种是:数据 查看详情

oralce基础—sqlplus工具运用礼记八目2017-12-2020:22:45

原文地址:https://www.toutiao.com/i6501603661565657614/一、数据库连接:sqlplus[user_name[/password][@host_string]]].user_name指定数据库的用户名.password指定数据用户名的密码.host_string指定要连接的数据库#登录方式:1.sqlplus/nologgingconnectsys/ora 查看详情

centos7静默安装数据库oralce11gr2

一、系统版本操作系统:CentOSLinuxrelease7.3.1611(Core)二、oracle软件版本oracle版本:linux.x64_11gR2linux.x64_11gR2_database_1of2.ziplinux.x64_11gR2_database_2of2.zip三、创建用户、组A)创建用户和组groupaddoinstallgroupadddbauseradd-goin 查看详情

oralce之存储过程

一:--循环向表emp中插入数据1declare2maxnumbernumber:=10000;3v_countnumber;4begin5v_count:=0;6FORxIN1..maxnumber7LOOP8v_count:=v_count+1;9insertintoemp(empno,ename,job,mgr,sal,comm)10values(1001,‘tom‘,‘clerk‘,100 查看详情