Oracle纯SQL实现多行并一行
2014-03-31 17:51
274 查看
问题:在开发过程中需要实现以下效果
1 a
1 b ------> 1 a,b,c
1 c
1.oracle 10以上可以使用wmsys.wm_concat函数,相当Easy
2.如果Oracle是9以下,则用Procedure或Function实现
3.纯SQL实现:(Oracle9及以上 由于有 SYS_CONNECT_BY_PATH函数)
SELECT REPAIR_REC_SYS_ID, TRANSLATE (LTRIM (text, '/'), '*/', '*,') researcherList
FROM (SELECT ROW_NUMBER () OVER (PARTITION BY REPAIR_REC_SYS_ID ORDER BY REPAIR_REC_SYS_ID,
lvl DESC) rn,
REPAIR_REC_SYS_ID, text
FROM (SELECT REPAIR_REC_SYS_ID, LEVEL lvl,
SYS_CONNECT_BY_PATH (GOOD_PART,'/') text
FROM (SELECT REPAIR_REC_SYS_ID, GOOD_PART as GOOD_PART,
ROW_NUMBER () OVER (PARTITION BY REPAIR_REC_SYS_ID ORDER BY REPAIR_REC_SYS_ID,GOOD_PART) x
FROM REPAIR_REPL_DETAIl
ORDER BY REPAIR_REC_SYS_ID, GOOD_PART) a
CONNECT BY REPAIR_REC_SYS_ID = PRIOR REPAIR_REC_SYS_ID AND x - 1 = PRIOR x))
WHERE rn = 1
ORDER BY REPAIR_REC_SYS_ID
REPAIR_REC_SYS_ID:你需要合并的参照字段
GOOD_PART:需要合并的字段
REPAIR_REPL_DETAIl:表名
1 a
1 b ------> 1 a,b,c
1 c
1.oracle 10以上可以使用wmsys.wm_concat函数,相当Easy
2.如果Oracle是9以下,则用Procedure或Function实现
3.纯SQL实现:(Oracle9及以上 由于有 SYS_CONNECT_BY_PATH函数)
SELECT REPAIR_REC_SYS_ID, TRANSLATE (LTRIM (text, '/'), '*/', '*,') researcherList
FROM (SELECT ROW_NUMBER () OVER (PARTITION BY REPAIR_REC_SYS_ID ORDER BY REPAIR_REC_SYS_ID,
lvl DESC) rn,
REPAIR_REC_SYS_ID, text
FROM (SELECT REPAIR_REC_SYS_ID, LEVEL lvl,
SYS_CONNECT_BY_PATH (GOOD_PART,'/') text
FROM (SELECT REPAIR_REC_SYS_ID, GOOD_PART as GOOD_PART,
ROW_NUMBER () OVER (PARTITION BY REPAIR_REC_SYS_ID ORDER BY REPAIR_REC_SYS_ID,GOOD_PART) x
FROM REPAIR_REPL_DETAIl
ORDER BY REPAIR_REC_SYS_ID, GOOD_PART) a
CONNECT BY REPAIR_REC_SYS_ID = PRIOR REPAIR_REC_SYS_ID AND x - 1 = PRIOR x))
WHERE rn = 1
ORDER BY REPAIR_REC_SYS_ID
REPAIR_REC_SYS_ID:你需要合并的参照字段
GOOD_PART:需要合并的字段
REPAIR_REPL_DETAIl:表名
相关文章推荐
- ORACLE纯SQL实现多行合并一行
- ORACLE纯SQL实现多行合并一行
- ORACLE纯SQL实现多行合并一行
- ORACLE纯SQL实现多行合并一行
- Oracle:一条SQL实现将多行数据并为一行显示
- ORACLE纯SQL实现多行合并一行【转】
- ORACLE纯SQL实现多行合并一行【转】
- ORACLE纯SQL实现多行合并一行
- ORACLE纯SQL实现多行合并一行
- ORACLE纯SQL实现多行合并一行
- ORACLE纯SQL实现多行合并一行[转]
- 公交查询系统(笔记)--T-sql 的从句 for xml path('') 实现多行合并到一行, 并带有分隔符
- 利用Oracle分析函数row_number和sys_connect_by_path实现多行数据合并为一行
- Oracle按时间分组统计的sql与oracle 多行合并一行
- :一条SQL实现将多行数据并为一行显示
- Oracle:一条SQL实现将多行数据并…
- 实现多行合并一行的SQL-[MSSQL2005]写法
- SQL实现多行变一行
- ORACLE纯SQL实现多行合并一行【转】
- oracle―SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼接在一起