Возможно, это не то, что вы ищете, но в прошлом мне повезло с такими конструкциями:
SELECT MAX(DECODE(fookey, 1, foo, NULL))
|| MAX(DECODE(fookey, 2, foo, NULL))
|| MAX(DECODE(fookey, 3, foo, NULL))
|| MAX(DECODE(fookey, 4, foo, NULL))
, groupingvalue
FROM mytable
GROUP BY groupingvalue;
Он не зависит от платформы и работает хорошо, когда у вас есть произвольное, но ограниченное количество значений для foo, и они основаны на каком-то другом значении ключа. Например, если у вас есть таблица счетов-фактур, и вы хотите увидеть все времена строк из счета-фактуры в одной строке, объединенные, и у вас есть верхний предел 5 позиций, это будет выглядеть так:
SELECT MAX(DECODE(lineno, 1, foo, NULL))
|| ', '
|| MAX(DECODE(lineno, 2, foo, NULL))
|| ', '
|| MAX(DECODE(lineno, 3, foo, NULL))
|| ', '
|| MAX(DECODE(lineno, 4, foo, NULL))
|| ', '
|| MAX(DECODE(lineno, 5, foo, NULL))
, invoiceid
FROM lineitem
GROUP BY invoiceid;