Используйте generate_series()
:
select t.*, n.n
from t cross join lateral
generate_series(1, t.no_appointments, 1) gs(n);
На самом деле Postgres допускает синтаксис как:
select t.*, generate_series(1, t.no_appointments, 1) as n
from t;
Однако мне не нравится изменять количество строк в select
пункт.