Общая схема условной агрегации:
SELECT
sid,
MAX(CASE WHEN value = 'v1' THEN value END) as col1,
MAX(CASE WHEN value = 'v2' THEN value END) as col2,
...
FROM t
GROUP BY sid
Или оставьте это для вас, чтобы поставить другие столбцы в качестве практики :)
Я предпочитаю ставить значение в качестве имя столбца, не col1, col2 и т. д. c
Также, если вы действительно хотите, чтобы пустые строки, а не нули для этих двух последних столбцов, вы можете изменить случай, когда ELSE '' (примечание: не будет работать если вы используете MIN вместо max) или используйте COALESCE вокруг MAX