在Oracle 中連接和分組多行
本文解決了在Oracle 中連接和分組多行的挑戰,允許您轉換表將分散的數據轉化為更有組織的結構。考慮以下場景:
您有一個包含兩列NAME 和GROUP_NAME 的表:
NAME GROUP_NAME name1 groupA name2 groupB name5 groupC name4 groupA name3 groupC
您的目標是建立一個結果,其中每個唯一的GROUP_NAME 值的名稱都串聯在一起:
GROUP_NAME NAMES groupA name1,name4 groupB name2 groupC name3,name5
在這種情況下,Oracle 11g 及更高版本中提供的LISTAGG 函數提供了簡單的解決方案:
SELECT group_name, LISTAGG(name, ', ') WITHIN GROUP (ORDER BY GROUP) "names" FROM name_table GROUP BY group_name
但是,如果您使用11g 之前的Oracle 版本,則可以使用分析來實現相同的結果:
select grp, ltrim(max(sys_connect_by_path (name, ',' )), ',') scbp from (select name, grp, row_number() over (partition by grp order by name) rn from tab ) start with rn = 1 connect by prior rn = rn-1 and prior grp = grp group by grp order by grp
同時利用LISTAGG 和分析,您可以在Oracle 中有效地連接和分組多行,將資料轉換為更有意義的表示形式,以便進一步分析和報告。
以上是如何在 Oracle 中連線和分組多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!