Quello che mi sembra strano è che abbia funzionato finora. In effetti fai un group by su un campo assente dalla query. Forse è questo che produce l'errore quando non ci sono più doppioni.
Il più semplice sarebbe di fare il controllo prima dell'inserimento dei dati.
codice:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
<script language="JavaScript" type="text/javascript">
<!--

function svuota(aSelect) {
 //---------- Prima svuoto tutti valori tranne quello selezionato nella select selezionata
 value      = aSelect.value;
 numElement = aSelect.length;
 var i = 0;
 for (j=numElement-1;j>=0;j--) {
  curOption = aSelect.options(j);
  if (curOption.value != value) {
	  aSelect.remove(j);
	} // if (curOption.value != value) 
 } // for (j=numElement-1;j>=0;j--)
 //---------- adesso per ogni select rimuovo il valore scelto
 var k = 0;
 for (k=1;k<=9;k++) {
  comboName = "combo"+k;
  svuota2(aSelect,comboName);
 } // for (k=1;k<=9;k++)
} // function svuota(unValore)

function svuota2(aSelect,selectDaSvuotare) {
 if (aSelect.id == selectDaSvuotare) {
  return;
 } // if (aSelect.id == selectDaSvuotare)
 var objSelectDaSvuotare = document.getElementById(selectDaSvuotare);
 numElement = objSelectDaSvuotare.length;
 for (j=numElement-1;j>=0;j--) {
  curOption = objSelectDaSvuotare.options(j);
  if (curOption.value == aSelect.value) {
	  objSelectDaSvuotare.remove(j);
	} // if (curOption.value == aSelect.value)
 } // for (j=numElement-1;j>=0;j--)
} // function svuota2(aSelect,selectDaSvuotare)

//-->
</script>

</head>
<body><?
//---------------- Soltanto se il tasto il cui nome è sublit con il valore "invio" è stato cliccato
if ($submit == "invio") {
 //--------------- controllo che un numero sia presente una volta sola
 //                inserendo i valori di ciascun combo in un array
 $arrControllo = array();
 for ($i=1;$i<=9;$i++) {
  $nameCombo      = "combo$i";
  $arrControllo[] = $$nameCombo;
 } // for ($i=1;$i<=9;$i++)
 //--------------- Adesso riordino l'array
 asort($arrControllo);
 //--------------- Adesso copio l'array in una stringa
 $lista = implode("", $arrControllo);
 //--------------- Se la lista è <> da 123456789 allora c'è un errore
 if ($lista != "123456789") {
  print "errore ";
 } else {
  print "nessun errore ";
 } //  if ($lista != "123456789") 
 print $lista; 
 exit;
} // if ($submit == "invio") ?>

<form action="test195.php" method="post"><? 
//--------------- Inizio bufferizzazione per creare le 9 combo
ob_start() ?>
<select id="pippo" name="pippo" onchange="svuota(this)">
 <option value="1">1</option>
 <option value="2">2</option>
 <option value="3">3</option>
 <option value="4">4</option>
 <option value="5">5</option>
 <option value="6">6</option>
 <option value="7">7</option>
 <option value="8">8</option>
 <option value="9">9</option>
</select><? 
//--------------- Inserisco il codice bufferizzato nella variabile $a
$a = ob_get_contents(); 
ob_end_clean();?>

<? 
//--------------- Stampo a video le nove combo rimpiazzando l'id e il nome
for ($i=1;$i<=9;$i++) {
 print str_replace("pippo","combo$i",$a)."\n";
} // for ($i=1;$i<=9;$i++)
?>



<input type="submit" value="reset" name="submit"><input type="submit" value="invio" name="submit">
</form>
</body>
</html>