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