Я знаю, что немного опоздал на вечеринку, но не ближе ли это к тому, что вы ищете:
SELECT [1] as a1, [2] as a2, [3] as a3
FROM
(
SELECT i, j, val
FROM T) AS source
PIVOT
(
MAX(val)
FOR j IN ([1], [2], [3])
) as pvt
Также, эта ссылка динамически обсуждает генерацию столбцов.
Удачи!
Мэтт