У меня есть таблица с информацией о клиенте Таблица Клиент:
CID CNAME
1 Abc
2 Def
3 Ghi
я хочу добавить столбец месяца в эту таблицу и реплицировать все строки для каждого месяца в операторе выбора. месяцы должны генерироваться на основе текущей даты.
Предполагаемый результат
Month CID CNAME
2019-01-01 1 Abc
2019-01-01 2 Def
2019-01-01 3 Ghi
2019-02-01 1 Abc
2019-02-01 2 Def
2019-02-01 3 Ghi
2019-03-01 1 Abc
2019-03-01 2 Def
2019-03-01 3 Ghi


Вы ищете generate_series(). Я бы сделал это как:
select gs.month, t.*
from t cross join
generate_series('2019-01-01'::date, '2019-03-01'::date, interval '1 month') gs(month)
order by gs.month, t.cid;
чтобы ответить на мой вопрос
SELECT DATE '2019-01-01' + (interval '1' month * generate_series(0,2)) as "month",
company_id,
company_name
FROM
company;
Вместо использования перекрестного соединения мы можем сделать это встроенным.