There are other ways you could write the query. Here's a couple.
You said you're on 10g, so here's an example using the model clause:
CHRIS>select a1, b1, c1
2 from (
3 select a, b, c, 1 x, 1 y
4 from transpose
5 )
6 model dimension by ( rownum-1 x , rownum-1 y )
7 measures ( 0 a1, 0 b1, 0 c1, a , b, c )
8 rules upsert all iterate (3)
9 (
10 a1[iteration_number, iteration_number] =
11 case when cv(y) = 0 then a[0, 0]
12 when cv(y) = 1 then b[0, 0]
13 else c[0, 0]
14 end,
15 b1[iteration_number, iteration_number] =
16 case when cv(y) = 0 then a[1, 1]
17 when cv(y) = 1 then b[1, 1]
18 else c[1, 1]
19 end,
20 c1[iteration_number, iteration_number] =
21 case when cv(y) = 0 then a[2, 2]
22 when cv(y) = 1 then b[2, 2]
23 else c[2, 2]
24 end
25 )
26 order by x, y;
A1 B1 C1
---------- ---------- ----------
1 2 3
4 5 6
7 8 9
Or if you're on 11g or higher you can unpivot+pivot:
CHRIS>select a, b, c from (
2 select *
3 from (select rownum r, a, b, c from transpose)
4 unpivot (
5 val for col in (A, B, C)
6 )
7 )
8 pivot (sum(val) for r in ('1' a, '2' b, '3' c));
A B C
---------- ---------- ----------
1 2 3
4 5 6
7 8 9