Combinaison de plusieurs lignes en une seule colonne délimitée par des virgules (SQL Server et Oracle)
Ce guide montre comment consolider plusieurs lignes en fonction d'un champ partagé (par exemple, TicketID
) et concaténer leurs valeurs correspondantes (par exemple, Person
) en une seule colonne séparée par des virgules (par exemple, People
). Nous explorerons des solutions pour SQL Server et Oracle.
Solution SQL Server
SQL Server utilise la fonction STUFF
pour une concaténation et une insertion efficaces de chaînes. L'exemple suivant illustre cela :
<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>
Solution Oracle
Oracle propose la fonction LISTAGG
, spécialement conçue pour concaténer les valeurs de colonnes avec un délimiteur personnalisé. Voici comment il est utilisé :
<code class="language-sql">SELECT TicketID, LISTAGG(Person, ',') WITHIN GROUP (ORDER BY Person) AS People FROM @Tickets GROUP BY TicketID</code>
Les deux méthodes fusionnent efficacement plusieurs lignes en une seule colonne, en séparant les valeurs concaténées par des virgules. Le choix de la fonction dépend de votre système de base de données (SQL Server ou Oracle).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!