I have a table like this:
| store | item | value |
|---|---|---|
| store1 | item1 | 2 |
| store1 | item2 | 3 |
I want to use it to create the following table:
| store | item | value |
|---|---|---|
| store1 | item1 | 0 |
| store1 | item1 | 1 |
| store1 | item1 | 2 |
| store1 | item2 | 0 |
| store1 | item2 | 1 |
| store1 | item2 | 2 |
| store1 | item2 | 3 |
I’m aware that I can do with recursive n(n) as (select 0 n union all select n + 1 from n limit 40) and then later a cross join if the upper limit was constant (40) but in my case, it changes by (store, item). I was wondering if this can be done in SQL or if it is better to figure it out in python. Thanks.
Advertisement
Answer
You can use a recursive CTE. The syntax is something like this:
with recursive cte(store, item, value, n) as (
select store, item, value, 0
from t
union all
select store, item, value, n + 1
from cte
where n < value
)
select store, item, n as value
from cte;
The exact syntax for recursive CTEs varies, depending on the database. This appears to be similar to the code you have in your question.
Here is a db<>fiddle.