PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres - Come convertire una riga con un intervallo int in righe intermedie da singoli valori di quell'intervallo?

Usa generate_series() :

select gs.i, t.*
from t cross join lateral
     generate_series(start_i, end_i, 1) gs(i);

A rigor di termini, il lateral non è necessario. Ma spiega cosa sta succedendo. Dovrei anche notare che puoi anche fare:

select generate_series(start_i, end_i) as i, t.*
from t;

Tuttavia, generate_series() influisce sul numero di righe nella query. Mi sento a disagio nell'avere tali effetti in SELECT clausola.