diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index b04242c3d8fd07e279dc43504d16e08054c82c69..9cb73c6af01cb6bd373c90278797d863857c734f 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -711,7 +711,7 @@ function calculer_jointure(&$boucle, $depart, $arrivee, $col='', $cond=false)
 
   list($dnom,$ddesc) = $depart;
   $id_primary = $ddesc['key']['PRIMARY KEY'];
-  $id_field = $dnom . '.' . $id_primary;
+	$keys = preg_split('/,\s*/', $id_primary);
   $id_table = "";
   $cpt = &$num[$boucle->descr['nom']][$boucle->id_boucle];
   foreach($res as $r) {
@@ -734,12 +734,15 @@ function calculer_jointure(&$boucle, $depart, $arrivee, $col='', $cond=false)
   }
   // la clause Group by est en conflit avec ORDER BY, a completer
 
-  if (!$pk && !in_array($id_field, $boucle->group)) {
-	  $boucle->group[] = $id_field;
-	// postgres exige que le champ pour GROUP soit dans le SELECT
-	  if (!in_array($id_field, $boucle->select))
-	    $boucle->select[] = $id_field;
-  }
+	foreach($keys as $id_prim){
+		$id_field = $dnom . '.' . $id_prim;
+		if (!$pk && !in_array($id_field, $boucle->group)) {
+			$boucle->group[] = $id_field;
+			// postgres exige que le champ pour GROUP soit dans le SELECT
+			if (!in_array($id_field, $boucle->select))
+			$boucle->select[] = $id_field;
+		}
+	}
 
   $boucle->lien = true;
   return $n;