Это вариант решения Джорджа, но он немного проще:
select n, m.attribute
from t m cross join lateral
generate_series(m.start_val, m.end_val) n;
Изменения:
CROSS JOIN
вместо JOIN
. Таким образом, нет необходимости в предложении ON
. - Нет арифметики c в
GENERATE_SERIES()
. - Нет арифметики c в
SELECT
. - Вы можете просто вызвать результат
GENERATE_SERIES()
с любым именем, которое вы хотите в наборе результатов.
Postgres фактически позволяет вам поместить GENERATE_SERIES()
в SELECT
:
select generate_series(m.start_val, m.end_val) as n, m.attribute
from t m;
Однако я не сторонник размещения функций генерации строк где-либо, кроме предложения FROM
. Мне просто сложно понять, что делает запрос.