Se você conseguir colocar seus dados em um par de chave/valor por formato de linha, grande parte do trabalho estará concluído. Deixe-me chamar esse resultado de
t
. Algo assim pode levá-lo ao resto do caminho:select max(case when LEFT(data, 4) = 'key1' then SUBSTRING(data, 6, len(data)) end) as key1,
MAX(case when LEFT(data, 4) = 'key2' then SUBSTRING(data, 6, len(data)) end) as key2,
MAX(case when LEFT(data, 4) = 'key2' then SUBSTRING(data, 6, len(data)) end) as key3
from t
group by (id - 1)/3
Isso pressupõe que o
id
é atribuído sequencialmente, conforme mostrado em seu exemplo.