Se sei in grado di inserire i tuoi dati nel formato di una coppia chiave/valore per riga, gran parte del lavoro è fatto. Lasciami chiamare quel risultato t
. Qualcosa del genere potrebbe farti fare il resto:
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
Ciò presuppone che l'id
viene assegnato in sequenza, come mostrato nel tuo esempio.