將多行組合成單一逗號分隔列(SQL Server 和 Oracle)
本指南示範如何基於共用欄位(例如 TicketID
)合併多行,並將其對應的值(例如 Person
)連接到單一逗號分隔列(例如 People
)。 我們將探索適用於 SQL Server 和 Oracle 的解決方案。
SQL Server 解決方案
SQL Server 利用 STUFF
函數進行高效率的字串連接和插入。 以下範例說明了這一點:
<code class="language-sql">SELECT t.TicketID, STUFF( ISNULL(( SELECT ', ' + x.Person FROM @Tickets x WHERE x.TicketID = t.TicketID GROUP BY x.Person FOR XML PATH (''), TYPE ).value('.','VARCHAR(max)'), ''), 1, 2, '' ) [No Preceding Comma], ISNULL(( SELECT ', ' + x.Person FROM @Tickets x WHERE x.TicketID = t.TicketID GROUP BY x.Person FOR XML PATH (''), TYPE ).value('.','VARCHAR(max)'), '') [Preceding Comma If Not Empty] FROM @Tickets t GROUP BY t.TicketID</code>
Oracle 解
Oracle 提供了 LISTAGG
函數,專門用於將列值與自訂分隔符號連接起來。 使用方法如下:
<code class="language-sql">SELECT TicketID, LISTAGG(Person, ',') WITHIN GROUP (ORDER BY Person) AS People FROM @Tickets GROUP BY TicketID</code>
這兩種方法都有效地將多行合併為一列,並用逗號分隔連接的值。 函數的選擇取決於您的資料庫系統(SQL Server 或 Oracle)。
以上是如何在 SQL Server 和 Oracle 中將多行連接成單一逗號分隔列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!