diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 71f6d154d35ed5210e7f9b5c60b044b4a0510473..94086a9d1288ed91b9290fb9305f8bbcb2a6892b 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -890,9 +890,13 @@ function calculer_critere_par_expression_num($idb, &$boucles, $crit, $tri, $cham
 	if ($suite !== "''") {
 		$texte = "\" . ((\$x = $suite) ? ('$texte' . \$x) : '0')" . " . \"";
 	}
-	$as = 'num' . ($boucle->order ? count($boucle->order) : "");
-	$boucle->select[] = $texte . " AS $as";
-	$order = "'$as'";
+	$asnum = 'num' . ($boucle->order ? count($boucle->order) : "");
+	$boucle->select[] = $texte . " AS $asnum";
+
+	$orderassinum = calculer_critere_par_expression_sinum($idb, $boucles, $crit, $tri, $champ);
+	$orderassinum = trim($orderassinum, "'");
+
+	$order = "'$orderassinum, $asnum'";
 	return $order;
 }
 
@@ -924,8 +928,23 @@ function calculer_critere_par_expression_sinum($idb, &$boucles, $crit, $tri, $ch
 	if ($suite !== "''") {
 		$texte = "\" . ((\$x = $suite) ? ('$texte' . \$x) : '0')" . " . \"";
 	}
-	$as = 'sinum' . ($boucle->order ? count($boucle->order) : "");
-	$boucle->select[] = 'CASE (' . $texte . ') WHEN 0 THEN 1 ELSE 0 END AS ' . $as;
+
+	$as = false;
+	$select = "CASE ( $texte ) WHEN 0 THEN 1 ELSE 0 END AS ";
+	foreach ($boucle->select as $s) {
+		if (strpos($s, $select) === 0) {
+			$as = trim(substr($s, strlen($select)));
+			if (!preg_match(",\W,", $as)) {
+				break;
+			}
+			$as = false;
+		}
+	}
+
+	if (!$as) {
+		$as = 'sinum' . ($boucle->order ? count($boucle->order) : "");
+		$boucle->select[] = $select . $as;
+	}
 	$order = "'$as'";
 	return $order;
 }