Introduction :
Dans Microsoft Access, vous pouvez utiliser des fonctions personnalisées pour combiner plusieurs lignes de données en une seule ligne. Cette technique est particulièrement utile lorsque vous devez résumer des données en fonction de champs communs.
Question :
Supposons que vous ayez un tableau dans MS Access contenant les données suivantes :
ColumnA | ColumnB |
---|---|
1 | abc |
1 | pqr |
1 | xyz |
2 | efg |
2 | hij |
3 | asd |
Votre objectif est de joindre les valeurs de la deuxième colonne (ColonneB) en une seule ligne pour chaque ligne unique de la première colonne (ColonneA). Le résultat souhaité est :
ColumnA | ColumnB |
---|---|
1 | abc, pqr, xyz |
2 | efg, hij |
3 | asd |
Solution de fonction personnalisée :
Pour ce faire, vous pouvez définir une fonction personnalisée dans Access pour effectuer la jointure. Voici un guide étape par étape :
<code class="language-vba">Public Function GetList(strSQL As String, Optional strDelimiter As String = ", ", Optional strValueList As String = "") Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset(strSQL) Do While Not rs.EOF strValueList = strValueList & rs(0) & strDelimiter rs.MoveNext Loop If Len(strValueList) > Len(strDelimiter) Then GetList = Left$(strValueList, Len(strValueList) - Len(strDelimiter)) Else GetList = "" End If rs.Close Set rs = Nothing End Function</code>
Cette fonction accepte trois paramètres :
Vous pouvez désormais utiliser des fonctions personnalisées dans les requêtes pour concaténer des valeurs. Entrez l'instruction SQL suivante dans la requête :
<code class="language-sql">SELECT ColumnA, GetList("SELECT ColumnB FROM Table1 WHERE ColumnA = " & [ColumnA]) AS ConcatenatedValues FROM Table1 GROUP BY ColumnA;</code>
Cette requête regroupera les lignes par ColumnA et utilisera la fonction GetList() pour concaténer les valeurs de ColumnB dans chaque groupe.
Le résultat de la requête sera un tableau avec les résultats souhaités :
ColumnA | ConcatenatedValues |
---|---|
1 | abc, pqr, xyz |
2 | efg, hij |
3 | asd |
Cette réponse révisée améliore le code VBA de :
If Len(strValueList) > Len(strDelimiter) Then
garantit que si la requête SQL ne renvoie aucune ligne, la fonction renvoie une chaîne vide au lieu d'un délimiteur de fin.Cela rend la fonction plus robuste et efficace. La requête SQL dans l'exemple est également légèrement simplifiée pour plus de clarté.
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!