SELECT *
FROM crosstab(
'SELECT id, week, param1
FROM tbl
ORDER BY 1,2'
, 'SELECT generate_series(1,5)'
) ct1 (id int, w1p1 int, w1p2 int, w1p3 int, w1p4 int, w1p5 int)
JOIN crosstab(
'SELECT id, week, param2
FROM tbl
ORDER BY 1,2'
, 'SELECT generate_series(1,5)'
) ct2 (id int, w2p1 int, w2p2 int, w2p3 int, w2p4 int, w2p5 int) USING (id)
JOIN crosstab(
'SELECT id, week, param3
FROM tbl
ORDER BY 1,2'
, 'SELECT generate_series(1,5)'
) ct3 (id int, w3p1 int, w3p2 int, w3p3 int, w3p4 int, w3p5 int) USING (id)
SELECT *
FROM crosstab(
'SELECT id, week, param1
FROM tbl
ORDER BY 1,2'
, 'SELECT generate_series(1,5)'
) ct1 (id int, w1p1 int, w1p2 int, w1p3 int, w1p4 int, w1p5 int)
JOIN crosstab(
'SELECT id, week, param2
FROM tbl
ORDER BY 1,2'
, 'SELECT generate_series(1,5)'
) ct2 (id int, w2p1 int, w2p2 int, w2p3 int, w2p4 int, w2p5 int) USING (id)
JOIN crosstab(
'SELECT id, week, param3
FROM tbl
ORDER BY 1,2'
, 'SELECT generate_series(1,5)'
) ct3 (id int, w3p1 int, w3p2 int, w3p3 int, w3p4 int, w3p5 int) USING (id)
dbfiddle herehere