Prova questo.
Un consiglio. Se il tuo campo data è di tipo CHAR o VARCHAR, per potere ordinare le date in maniera corretta devono avere il formato SSAAMMGG (esempio 20161031 o 2017-01-01). Se hai un formato GGMMSSAA (esempio 01/01/2017) allora non funzionerà. Il 20/02/2017 apparira prima del 31/01/2017 per esempio.

Codice PHP:
<?php
define
('DB_HOST''127.0.0.1');
define('DB_NAME''tests');
define('DB_USER''root');
define('DB_PWD' '');
$bdd       = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME,DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$query     "SELECT `data`, `nome`,count(*) as conta FROM `tab` group by `data`,`nome` order by `data`, `nome`";
$prepared     $bdd->prepare($query);
$prepared->execute();
$result       $prepared->fetchAll();
$arrDate = array();
$arrNomi = array();
$arrFina = array();
foreach(
$result as $subArray) {
 if (!
in_array($subArray['data'],$arrDate)) {$arrDate[] = $subArray['data'];}
 if (!
in_array($subArray['nome'],$arrNomi)) {$arrNomi[] = $subArray['nome'];}
 
$arrFina[$subArray['data']][$subArray['nome']] = $subArray['conta'];
}
?>
<table border="1px">
 <tr align='center' >
  <td>
  </td><?php
  
foreach($arrDate as $key => $value) {?>
   <td><?php print $value;?></td><?php
  
?>
 </tr>
<?php
 
foreach($arrNomi as $keyNomi => $valNomi) {?>
 <tr align='center' style="border:1px solid black">  
  <td><?php print $valNomi;?></td><?php
   
foreach($arrDate as $keyDate => $valDate) {?>
    <td><?php print (isset($arrFina[$valDate][$valNomi]) ? $arrFina[$valDate][$valNomi] : "");?></td><?php
   
}?>
 </tr><?php
 
}?>
</table>
I dati
170219-001.JPG

Il risultato
170219-002.JPG