将同列多行的值转换成一个字符串显示
2015-11-06 10:01
274 查看
-- 原始数据
-- a 111
-- b 222
-- a 333
-- a 444
-- b 555
-- 最终结果
-- a 111*333*444
SELECT
L4.L_TIME
,MAX(SUBSTR(L4.分组内容,2)) 最终字段值
FROM(
SELECT
L3.L_TIME
,SYS_CONNECT_BY_PATH(L3.L_CONTENT,'*') AS 分组内容
FROM(
SELECT
L2.L_TIME
,L2.L_CONTENT
,L2.L_TIME||L2.分组内编号 AS 分组字段加编号,L2.L_TIME||(L2.分组内编号-1) AS 上级分组字段加编号
FROM(
SELECT
L1.L_TIME -- 分组依据
,L1.L_CONTENT -- 同一列中 要合并的不同行 的值
,ROW_NUMBER() OVER (PARTITION BY L1.L_TIME ORDER BY L1.L_CONTENT ASC) 分组内编号
FROM LOGS L1
) L2
) L3
START WITH L3.上级分组字段加编号 LIKE '%0'
CONNECT BY PRIOR L3.分组字段加编号=L3.上级分组字段加编号
) L4
WHERE L_TIME='111'
GROUP BY L4.L_TIME
还有另外一种方式,如果只返回单值的话可以用以下方式
-- a 111
-- b 222
-- a 333
-- a 444
-- b 555
-- 最终结果
-- a 111*333*444
SELECT
L4.L_TIME
,MAX(SUBSTR(L4.分组内容,2)) 最终字段值
FROM(
SELECT
L3.L_TIME
,SYS_CONNECT_BY_PATH(L3.L_CONTENT,'*') AS 分组内容
FROM(
SELECT
L2.L_TIME
,L2.L_CONTENT
,L2.L_TIME||L2.分组内编号 AS 分组字段加编号,L2.L_TIME||(L2.分组内编号-1) AS 上级分组字段加编号
FROM(
SELECT
L1.L_TIME -- 分组依据
,L1.L_CONTENT -- 同一列中 要合并的不同行 的值
,ROW_NUMBER() OVER (PARTITION BY L1.L_TIME ORDER BY L1.L_CONTENT ASC) 分组内编号
FROM LOGS L1
) L2
) L3
START WITH L3.上级分组字段加编号 LIKE '%0'
CONNECT BY PRIOR L3.分组字段加编号=L3.上级分组字段加编号
) L4
WHERE L_TIME='111'
GROUP BY L4.L_TIME
还有另外一种方式,如果只返回单值的话可以用以下方式
select wm_concat(name) name from mytest; --默认是以,符号进行分割的;再配上replace()函数可以对默认的分隔进行修改
相关文章推荐
- MvvM----Robobinding的使用(1)环境搭建
- sort +awk+uniq 统计文件中出现次数最多的前10个单词
- tomcat动态启动配置
- 深入源代码设计i2c驱动@linux2.6.32.2
- 导入maven项目时报错:Unsupported IClasspathEntry kind=4
- My97DatePicker
- iTunes Connect提交审核报错:无法保存您的 App 信息。请再试一次
- 查看文件(或文件夹)被哪个进程使用
- Buttons in button bars should be borderless
- cxf客户端编写
- [Jquery] js验证手机号
- 分享到新浪,微博,QQ等各大平台--第三方组件:友推
- JCO 连接配置注释
- NSURLSession学习笔记(Session Task)
- JavaMail 发送邮件系列(一):发送基本邮件
- Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
- spring,maven,jdbc ,sqlserver 开启事务
- hadoop文件系统简介
- 等待是最糟的决策
- Win7系统64位下解决 {000209FF-0000-0000-C000-000000000046}