Lo estás complicando en exceso la consulta:
Código PHP:
$query = "SELECT ";
$query .= " SUM(IF(nomin = 'U1', num1, 0)) T1, ";
$query .= " SUM(IF(nomin = 'U2', num1, 0)) T2 ";
$query .= "FROM puertos ";
$query .= "WHERE nom = 'CURSO1'";
$query .= " AND nomin IN('U1', 'U2')";
$query .= " AND p.certificacion BETWEEN '2013-01-01' AND '2013-03-31'";
Luego, el como repartes esos datos, dependerá de a qué tablas te refieras, pero no es demasiado complicado, si te pones a leer las FAQs:
Distribuir los resultado de una query en columnas Código PHP:
<?php
/// no pongo el resto de la conexion
/// Nota: Esto es con la libreria MYSQL, que es obsoleta ya. Conviene usar MYSQLI
$query = "SELECT ";
$query .= " SUM(IF(nomin = 'U1', num1, 0)) T1, ";
$query .= " SUM(IF(nomin = 'U2', num1, 0)) T2 ";
$query .= "FROM puertos ";
$query .= "WHERE nom = 'CURSO1'";
$query .= " AND nomin IN('U1', 'U2')";
$query .= " AND p.certificacion BETWEEN '2013-01-01' AND '2013-03-31'"
$result = mysql_query($query) or die("Error: ".mysql_error());
echo "<table align=center>";
$columnes = 2; # Número de columnas (variable)
if (($rows=mysql_num_rows($result))==0) {
echo "<tr><td colspan=$columnes>No hay resultados en la BD.</td></tr> ";
} else {
echo "<tr><td colspan=$columnes>$rows Resultados </td></tr>";
}
for ($i=1; $row = mysql_fetch_row ($result); $i++) {
$resto = ($i % $columnes); # Número de celda del <tr> en que nos encontramos
if ($resto == 1) {echo "<tr>";} # Si es la primera celda, abrimos <tr>
echo "<td>$row[1]</td>";
if ($resto == 0) {echo "</tr>";} # Si es la última celda, cerramos </tr>
}
if ($resto <> 0) { # Si el resultado no es múltiple de $columnes acabamos de rellenar los huecos
$ajust = $columnes - $resto; # Número de huecos necesarios
for ($j = 0; $j < $ajust; $j++) {echo "<td> </td>";}
echo "</tr>"; # Cerramos la última línea </tr>
}
mysql_close($conexion);
echo "</table>";
?>
Nota 2: Sólo hice un Copy+Paste de la mayor parte. Te conviene revisar.