Använd generate_series()
:
select gs.i, t.*
from t cross join lateral
generate_series(start_i, end_i, 1) gs(i);
Strängt taget, den lateral
behövs inte. Men det förklarar vad som händer. Jag bör också notera att du också kan göra:
select generate_series(start_i, end_i) as i, t.*
from t;
Men generate_series()
påverkar antalet rader i frågan. Jag är obekväm med att ha sådana effekter i SELECT
klausul.