I want to pivot a table having some columns like below.
| ID | week1 | week2 | week3 | week4 | week5 | week6 | week7 |
|---|---|---|---|---|---|---|---|
| 1 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 2 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 3 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
The desired output is -
| ID | week_number | week_value |
|---|---|---|
| 1 | 1 | 8 |
| 1 | 2 | 9 |
| 1 | 3 | 10 |
| 1 | 4 | 11 |
| 1 | 5 | 12 |
| 1 | 6 | 13 |
| 1 | 7 | 14 |
| 2 | 1 | 15 |
| 2 | 2 | 16 |
| 2 | 3 | 17 |
| 2 | 4 | 18 |
| 2 | 5 | 19 |
| 2 | 6 | 20 |
| 2 | 7 | 21 |
| 3 | 1 | 22 |
| 3 | 2 | 23 |
| 3 | 3 | 24 |
| 3 | 4 | 25 |
| 3 | 5 | 26 |
| 3 | 6 | 27 |
| 3 | 7 | 28 |
I tried using crosstab but couldn't get it working right. Below is my tried approach -
select * from crosstab('select ID,week1, week2,week3,week4,week5,week6,week7 order by ID') as table_name(ID, week_number, week_value);
Please can someone help as I don't have much experience in handling complex sql queries.