Условие лишь формирует массив данных которые придут на клиент, и не важно через HTML или AJAX. А прогоняя данные через шаблон мы получаем страницу с динамическим количеством колонок и столбцов.
Пример темплейта с переменным количеством столбцов и строк на angularjs:
<table>
<tr ng-repeat="row in rows">
<td ng-repeat="cal in row.cals">{{ cal }}</td>
</tr>
</table>