用SQL將Oracle中同壹列的多行記錄拼接成壹個字符串是如何實現的:[sql]--
原始數據--
a
111--
b
222--
a
333--
a
444--
b
555--
最終結果--
a
111*333*444SELECTL4.L_TIME,MAX(SUBSTR(L4.分組內容,2))
最終字段值FROM(SELECTL3.L_TIME,SYS_CONNECT_BY_PATH(L3.L_CONTENT,'*')
AS
分組內容FROM(SELECTL2.L_TIME,L2.L_CONTENT,L2.L_TIME||L2.分組內編號
AS
分組字段加編號,L2.L_TIME||(L2.分組內編號-1)
AS
上級分組字段加編號FROM(SELECTL1.L_TIME
--
分組依據,L1.L_CONTENT
--
同壹列中
要合並的不同行
的值,ROW_NUMBER()
OVER
(PARTITION
BY
L1.L_TIME
ORDER
BY
L1.L_CONTENT
ASC)
分組內編號FROM
LOGS
L1)
L2)
L3START
WITH
L3.上級分組字段加編號
LIKE
'%0'CONNECT
BY
PRIOR
L3.分組字段加編號=L3.上級分組字段加編號)
L4WHERE
L_TIME='111'GROUP
BY
L4.L_TIME--
ROW_NUMBER()
OVER(PARTITION
BY
A
ORDER
BY
B
DESC)
新列名--
根據A分組,在分組內部根據B排序,而此函數計算的值就表示每組內部排序後的順序編號(組內連續的唯壹的)--
SYS_CONNECT_BY_PATH
函數:
第壹個參數是形成樹形式的字段,第二個參數是父級和其子級分隔顯示用的分隔符--
CONNECT
BY
PRIOR
...我們常常說
用SQL將Oracle中同壹列的多行記錄拼接成壹個字符串是如何實現的:[sql]--
原始數據--
a
111--
b
222--
a
333--
a
444--
b
555--
最終結果--
a
111*333*444SELECTL4.L_TIME,MAX(SUBSTR(L4.分組內容,2))
最終字段值FROM(SELECTL3.L_TIME,SYS_CONNECT_BY_PATH(L3.L_CONTENT,'*')
AS
分組內容FROM(SELECTL2.L_TIME,L2.L_CONTENT,L2.L_TIME||L2.分組內編號
AS
分組字段加編號,L2.L_TIME||(L2.分組內編號-1)
AS
上級分組字段加編號FROM(SELECTL1.L_TIME
--
分組依據,L1.L_CONTENT
--
同壹列中
要合並的不同行
的值,ROW_NUMBER()
OVER
(PARTITION
BY
L1.L_TIME
ORDER
BY
L1.L_CONTENT
ASC)
分組內編號FROM
LOGS
L1)
L2)
L3START
WITH
L3.上級分組字段加編號
LIKE
'%0'CONNECT
BY
PRIOR
L3.分組字段加編號=L3.上級分組字段加編號)
L4WHERE
L_TIME='111'GROUP
BY
L4.L_TIME--
ROW_NUMBER()
OVER(PARTITION
BY
A
ORDER
BY
B
DESC)
新列名--
根據A分組,在分組內部根據B排序,而此函數計算的值就表示每組內部排序後的順序編號(組內連續的唯壹的)--
SYS_CONNECT_BY_PATH
函數:
第壹個參數是形成樹形式的字段,第二個參數是父級和其子級分隔顯示用的分隔符--
CONNECT
BY
PRIOR
是標示父子關系的對應--
START
WITH
代表妳要開始遍歷的的節點