Cet article montre comment concaténer plusieurs valeurs de chaîne en une seule chaîne à l'aide de différentes bases de données SQL. Le but est d'agréger un champ de chaîne.
Oracle et DB2 :
Oracle et DB2 offrent tous deux la fonction LISTAGG
intégrée. La syntaxe est simple :
<code class="language-sql">SELECT FieldA, LISTAGG(FieldB, ',') WITHIN GROUP (ORDER BY FieldB) AS FieldBs FROM TableName GROUP BY FieldA ORDER BY FieldA;</code>
PostgreSQL :
PostgreSQL utilise la fonction STRING_AGG
:
<code class="language-sql">SELECT FieldA, STRING_AGG(FieldB, ',') AS FieldBs FROM TableName GROUP BY FieldA ORDER BY FieldA;</code>
SQL Serveur :
SQL Server 2017 et versions ultérieures prennent également en charge STRING_AGG
. Pour les anciennes versions (avant 2017), une approche plus complexe utilisant STUFF
et FOR XML PATH
est nécessaire :
<code class="language-sql">WITH CTE_TableName AS ( SELECT FieldA, FieldB FROM TableName ) SELECT t0.FieldA, STUFF(( SELECT ',' + t1.FieldB FROM CTE_TableName t1 WHERE t1.FieldA = t0.FieldA ORDER BY t1.FieldB FOR XML PATH('') ), 1, LEN(','), '') AS FieldBs FROM CTE_TableName t0 GROUP BY t0.FieldA ORDER BY FieldA;</code>
SQLite :
La fonction GROUP_CONCAT
de SQLite peut effectuer une agrégation de chaînes. La commande nécessite un CTE ou une sous-requête :
Avec commande :
<code class="language-sql">WITH CTE_TableName AS ( SELECT FieldA, FieldB FROM TableName ORDER BY FieldA, FieldB ) SELECT FieldA, GROUP_CONCAT(FieldB, ',') AS FieldBs FROM CTE_TableName GROUP BY FieldA ORDER BY FieldA;</code>
Sans commande :
<code class="language-sql">SELECT FieldA, GROUP_CONCAT(FieldB, ',') AS FieldBs FROM TableName GROUP BY FieldA ORDER BY FieldA;</code>
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!