Esta es mi contribución:
Código SQL:
Ver originalWITH T AS
(SELECT ROW_NUMBER() OVER(Partition BY rut ORDER BY fono) Nm,
*
FROM #temp)
SELECT rut,
MAX(CASE WHEN Nm=1 THEN fono END) [01],
MAX(CASE WHEN Nm=2 THEN fono END) [02],
MAX(CASE WHEN Nm=3 THEN fono END) [03],
MAX(CASE WHEN Nm=4 THEN fono END) [04],
MAX(CASE WHEN Nm=5 THEN fono END) [05],
MAX(CASE WHEN Nm=6 THEN fono END) [06],
MAX(CASE WHEN Nm=7 THEN fono END) [07],
MAX(CASE WHEN Nm=8 THEN fono END) [08],
MAX(CASE WHEN Nm=9 THEN fono END) [09],
MAX(CASE WHEN Nm=10 THEN fono END) [10],
MAX(CASE WHEN Nm=11 THEN fono END) [11],
MAX(CASE WHEN Nm=12 THEN fono END) [12],
MAX(CASE WHEN Nm=13 THEN fono END) [13],
MAX(CASE WHEN Nm=14 THEN fono END) [14],
MAX(CASE WHEN Nm=15 THEN fono END) [15],
MAX(CASE WHEN Nm=16 THEN fono END) [16],
MAX(CASE WHEN Nm=17 THEN fono END) [17],
MAX(CASE WHEN Nm=18 THEN fono END) [18],
MAX(CASE WHEN Nm=19 THEN fono END) [19],
MAX(CASE WHEN Nm=20 THEN fono END) [20]
FROM T
GROUP BY rut
ORDER BY rut;