簡體   English   中英

SQL查詢,用於將當前行值與先前的行值合並

[英]SQL query for concatinating current row value with previous row values

我有以下格式的源數據。

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

我需要以下輸出。

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

請為此提供SQL查詢。

SQL小提琴

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

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

查詢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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM