在Oracle 中連接和分組多行
如果您有一個包含多行的表需要連接和分組,請使用Oracle 11g中的LISTAGG 函數提供了一個簡單的解:
SELECT group_name, LISTAGG(name, ', ') WITHIN GROUP (ORDER BY GROUP) AS "names" FROM name_table GROUP BY group_name
LISTAGG 函數會聚合一組行中的多個值,並以指定的分隔符號(此處為「,」)分隔它們。它簡化了連接和分組的過程,從而產生所需的結果。
對於Oracle 11g 之前的資料庫,可以使用使用分析的替代方法:
SELECT grp, ltrim(max(sys_connect_by_path(name, ',' )), ',') AS scbp FROM ( SELECT name, grp, row_number() OVER (PARTITION BY grp ORDER BY name) AS rn FROM tab ) START WITH rn = 1 CONNECT BY PRIOR rn = rn - 1 AND PRIOR grp = grp GROUP BY grp ORDER BY grp
此查詢利用CONNECT BY子句和row_number() 分析函數以迭代方式連接和分組值,產生與LISTAGG 相同的輸出方法。
以上是如何在 Oracle 中連線和分組多行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!