Поскольку вы упомянули, что даже решение с фиксированным числом строк и столбцов в порядке, вы можете попробовать это ...
SELECT MIN(DECODE(rownum, 1, A, null)) A,
MIN(DECODE(rownum, 1, B, null)) B,
MIN(DECODE(rownum, 1, C, null)) C,
MIN(DECODE(rownum, 1, D, null)) D,
MIN(DECODE(rownum, 2, A, null)) A2,
MIN(DECODE(rownum, 2, B, null)) B2,
MIN(DECODE(rownum, 2, C, null)) C2,
MIN(DECODE(rownum, 2, D, null)) D2
FROM <test_table>