Если вы в Oracle 11g, есть функция сводных запросов.Я еще не использовал его, но похоже, что вот что вам нужно:
select * from (
select bill, goods
from bills
)
pivot
(
count(goods)
for goods in ('TV', 'CD', 'phone', 'mouse')
)
order by bill
Кажется, вам необходимо перечислить возможные значения для goods
.Но если вам нужно сгенерировать это на лету, вы можете сделать один запрос, чтобы получить отдельные значения, превратить этот список в строку с разделителями-запятыми, а затем выполнить реальный запрос как динамический SQL или сгенерированный скрипт.
(я ожидаю, что будет таблица со списком возможных значений goods
, которую можно использовать для создания списка значений вместо запроса большой таблицы фактов.)