简体   繁体   中英

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 Fiddle

Oracle 11g R2 Schema Setup :

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 :

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)

Results :

| 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 :

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

Results :

| 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 |

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM