Premetto che i campi della tua tabella si chiamano idcliente, nome, settimana, vendite.
La tabelle deve essere ordinata per idcliente e settimana ASC, proprio come hai fatto.
Lo script gestisce anche i "buchi" nelle settimane. Per esempio un cliente che non ordina sempre qualcosa ogni settimana.
Codice PHP:
<?php
$sql = "SELECT idcliente,nome,settimana,vendite FROM dati_tb WHERE settimana between '$primo_parametro' ".
"and '$secondo_parametro' and cod_cliente = '$codice_cliente' ORDER BY cod_cliente, settimana ASC ";
...
$array = array();
$sav_idcliente = -1;
$index = 0;
$min_settimana = 99;
$max_settimana = 0;
while (list($idcliente,$nome,$settimana,$vendite ) = mysql_fetch_array($res)) {
if ($settimana < $min_settimana) {$min_settimana = $settimana;}
if ($settimana > $max_settimana) {$max_settimana = $settimana;}
if ($sav_idcliente != $idcliente) {
$index++;
$sav_idcliente = $idcliente;
$array[$index]['idcliente'] = $idcliente;
$array[$index]['nome'] = $nome;
}
$array[$index][$settimana] = $vendite;
}?>
<table summary="" border="1">
<th>Codice cliente</th>
<th>Nome</th><?php
for ($i=$min_settimana;$i<=$max_settimana;$i++) {?>
<th><?php print $i; ?></th><?php
}
foreach ($array as $key => $sub_array) {?>
<tr>
<td><?php print $sub_array['idcliente']; ?></td>
<td><?php print $sub_array['nome']; ?></td><?php
for ($i=$min_settimana;$i<=$max_settimana;$i++) {
if (! isset($sub_array[$i])) {?>
<td>0</td><?php
} else {?>
<td><?php print $sub_array[$i]; ?></td><?php
}
}?>
</tr><?php
}?>
</table>