Поместите результаты вашего запроса в массив как
$query = mysql_query('SELECT from_group, to_group, value FROM table')
while($row = mysql_fetch_array($query))
$results[$row['from_group']][$row['to_group']] = $row['value'];
Затем выполните итерацию по массиву, чтобы сгенерировать заголовок таблицы, например
echo "<table><tr>'"
foreach ($results as $group => $group_array)
echo "<td>$group</td>";
echo "</tr>";
Затем повторите итерацию для построения полей:
foreach ($results as $from_group => $from_group_array)
{
echo "<tr><td>$from_group</td>";
foreach ($from_group_array as $cell_value)
echo "<td>$cell_value</td>";
echo "</tr>";
}
Наконец-то закончим стол, конечно.
Этот пример быстро составлен, чтобы дать представление о том, как действовать, и, вероятно, содержит ошибки ... И наверняка его можно написать намного лучше!