[英]SQL query for concatinating current row value with previous row values
I have source data in following format. 我有以下格式的源数据。
RN ID NAME
1 1 P
2 2 Q
3 3 R
4 4 S
5 5 T
6 1 A
7 2 B
8 3 C
9 4 D
10 5 E
I need following output. 我需要以下输出。
RN ID NAME
1 1 P
2 2 PQ
3 3 PQR
4 4 PQRS
5 5 PQRST
6 1 A
7 2 AB
8 3 ABC
9 4 ABCD
10 5 ABCDE
Kindly provide SQL query for this. 请为此提供SQL查询。
Oracle 11g R2 Schema Setup : Oracle 11g R2架构设置 :
CREATE TABLE table_name ( RN, ID, NAME ) As
SELECT 1, 1, 'P' FROM DUAL UNION ALL
SELECT 2, 2, 'Q' FROM DUAL UNION ALL
SELECT 3, 3, 'R' FROM DUAL UNION ALL
SELECT 4, 4, 'S' FROM DUAL UNION ALL
SELECT 5, 5, 'T' FROM DUAL UNION ALL
SELECT 6, 1, 'A' FROM DUAL UNION ALL
SELECT 7, 2, 'B' FROM DUAL UNION ALL
SELECT 8, 3, 'C' FROM DUAL UNION ALL
SELECT 9, 4, 'D' FROM DUAL UNION ALL
SELECT 10, 5, 'E' FROM DUAL
Query 1 : 查询1 :
SELECT RN,
ID,
REPLACE( SYS_CONNECT_BY_PATH( NAME, ',' ), ',' ) AS NAME
FROM TABLE_NAME
START WITH ID = 1
CONNECT BY PRIOR ID + 1 = ID
AND PRIOR ASCII(NAME) + 1 = ASCII(NAME)
| RN | ID | NAME |
|----|----|-------|
| 1 | 1 | P |
| 2 | 2 | PQ |
| 3 | 3 | PQR |
| 4 | 4 | PQRS |
| 5 | 5 | PQRST |
| 6 | 1 | A |
| 7 | 2 | AB |
| 8 | 3 | ABC |
| 9 | 4 | ABCD |
| 10 | 5 | ABCDE |
Query 2 : 查询2 :
SELECT RN,
ID,
REPLACE( SYS_CONNECT_BY_PATH( NAME, ',' ), ',' ) AS NAME
FROM TABLE_NAME
START WITH ID = 1
CONNECT BY PRIOR ID + 1 = ID
AND PRIOR RN + 1 = RN
| RN | ID | NAME |
|----|----|-------|
| 1 | 1 | P |
| 2 | 2 | PQ |
| 3 | 3 | PQR |
| 4 | 4 | PQRS |
| 5 | 5 | PQRST |
| 6 | 1 | A |
| 7 | 2 | AB |
| 8 | 3 | ABC |
| 9 | 4 | ABCD |
| 10 | 5 | ABCDE |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.