PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres - Comment convertir une ligne avec une plage int en lignes intermédiaires à partir de valeurs individuelles de cette plage ?

Utilisez generate_series() :

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

A proprement parler, le lateral n'est pas nécessaire. Mais ça explique ce qui se passe. Je dois également noter que vous pouvez également faire :

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

Cependant, generate_series() affecte le nombre de lignes dans la requête. Je ne suis pas à l'aise avec de tels effets dans le SELECT clause.