das ist völlig egal. die spaltenanzahl ergibts sich zwangsläufig anhand der anzahl der datensätze...
lediglich die zeilen (in der tabelle) sind nun dynamisch.
eine spalte ohne werte (in der tabelle) kann es ja nicht geben, weil es keine "fehlenden" datensätze geben kann. wo nix ist, muss auch nichts dargestellt werden. ist in einem tabellenfeld einfach kein wert, wird das in der ausgabe tabelle mit <td></td> ausgegeben.
wie gesagt, eine leere spalte in der tabelle darf es logisch garnicht geben.
und das es nahezu das gleiche ist wie bei dir liegt einfach daran, das ich deinen code als vorlage genommen hab