2015.12.24(圣诞节) 解决Oralce数据库将具有相同属性的多行合并为一行的简单方法多年想要wmsys.wm_concat
用到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

2015.12.24(圣诞节) 解决Oralce数据库将具有相同属性的多行合并为一行的简单方法多年想要wmsys.wm_concat的更多相关文章
- 2015.12.21~2015.12.24真题回顾!-- HTML5学堂
2015.12.21~2015.12.24真题回顾!-- HTML5学堂 山不在高,有仙则名!水不在深,有龙则灵!千里冰封,非一日之寒!IT之路,须厚积薄发!一日一小练,功成不是梦!小小技巧,尽在HT ...
- 2015/12/24:嵌入式C语言的位操作随笔
今晚是平安夜,首先祝大家平安夜快乐,明天是圣诞,祝大家圣诞快乐!! 好了,这周都特别有空,上班也非常轻松,基本就是看看内核驱动,学学安卓,没什么正事的开发活干.今晚,我们来总结一例在现实 ...
- 2015.12.29~2015.12.30真题回顾!-- HTML5学堂
2015.12.29~2015.12.30真题回顾!-- HTML5学堂 吃饭,能够解决饥饿,提供身体运作机能.练习就像吃饭,强壮自己,提升编程技能,寻求编程技巧的最佳捷径!吃饭不能停,练习同样不能停 ...
- Oracle数据库多行记录转换一行并排序函数
Oracle数据库多行记录转换一行并排序方法 在ORACLE数据库查询中,我们通常会要求用到将多行记录转换成一行并排序,这时候我们自然会想到Oracle的一个“wx_concat”函数,可以将多行记录 ...
- 【转】 学习ios(必看经典)牛人40天精通iOS开发的学习方法【2015.12.2
原文网址:http://bbs.51cto.com/thread-1099956-1.html 亲爱的学员们: 如今,各路开发者为淘一桶金也纷纷转入iOS开发的行列.你心动了吗?想要行动吗?知道如何做 ...
- Oralce数据库的优化
Oralce数据库的优化(面试必问) (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 ...
- SQL点滴12—SQL Server备份还原数据库中的小把戏
原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息“is formatted to support 1 media families, ...
- (转)PLSQL Developer 12.0.7连接Oracle12c数据库
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sl1992/article/details/80489413 1.下载安装PL/SQL Develo ...
- Error:(12, 24) 警告: [deprecation] android.hardware中的Camera已过时.android
问题:android studio编译项目时出现: Error:(12, 24) 警告: [deprecation] android.hardware中的Camera已过时 解决:(只是让其不提示) ...
随机推荐
- Spark基本概念快速入门
Spark集群 一组计算机的集合,每个计算机节点作为独立的计算资源,又可以虚拟出多个具备计算能力的虚拟机,这些虚拟机是集群中的计算单元.Spark的核心模块专注于调度和管理虚拟机之上分布式计算任务 ...
- 【转载】Java类加载原理解析
Java类加载原理解析 原文出处:http://www.blogjava.net/zhuxing/archive/2008/08/08/220841.html 1 基本信息 摘要: 每个j ...
- Vue v-on v-model 组合使用
v-on vue可以使用v-on指令来监听事件,方便与用户进行交互.我们不需要修改DOM中的数据,所有的操作都由Vue来实现,你编写的代码只需要关注底层逻辑.这也是Vue强大的地方之一 <!DO ...
- liunx常用命令-----查找命令
locate 根据文件名查找文件 根据数据库记录搜索,当天创建的搜不到 whereis which 搜索命令的命令 如 whereis ls find /root -name ...
- 关于html的一些杂技
html预定义字符指的是 :< > html实体指的是 $amp 等 php中htmlspeciachar()就是讲html预定义字符转换成html实体. 浏览器渲染时,会将html实 ...
- jsp:jstl标签库国际化 fmt
首先资源文件目录是:src/man/sources (这是它默认的资源文件) i18n_en_US.properties文件内容 copyright=Copyright \u00A9 2013 lan ...
- python中的类和对象
类和对象 1. 类和对象和概念 类:共性事物的抽象,是对某一类具有共同事物的描述,是具有相同属性和方法的集合 对象:类的实例,是共性事物的一个体现,是这类事物中的每个个体 2. 总结: 类是对象的模板 ...
- Hibernate(2)
一.实体类编写规则 1.实体类里面的属性属于私有的 2.私有属性使用公开的set和get方法操作 3.要求实体类有属性作为唯一值(一般使用id值) 4.实体类属性建议不要使用基本数据类型,使用基本数据 ...
- Spring Boot 简单日志配置
在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件## 默认使用logback logging.level.root=error ...
- linux monitor and maintanence
@cacti 1.install epel extends source 2.install lamp use yum method yum install -y httpd php php-mysq ...