SQL добавить примеры из группировки данных - PullRequest
1 голос
/ 07 декабря 2011

Здравствуйте, у меня небольшой вопрос по Oracle SQL. У меня есть таблица Auto_Parts:

Category,Manufacturer_id,Part_name
Tires,Michelin, Pilot Pro
Tires,Michelin, Power One
Tires,Bridgestone, Potenza
Tires,Bridgestone, Turanza
Tires,Bridgestone, Blizzak

Запрос:

select Category,Manufacturer_id,count(*) cnt,example_1,example_2,example_3
  from auto_parts
group by Category,Manufacturer_id

результат:

Category,Manufacturer_id,cnt  ,example_1,example_2,example_3
Tires   ,Michelin       ,1000 ,Pilot Pro,Power One,Power Two
Tires   ,Bridgestone    ,200  ,Potenza  ,Turanza  ,Blizzak

Вопрос: как я могу получить 3 произвольных значения из таблицы выше и представить их как 3 столбца в моем запросе (пример выходных данных представлен выше, столбцы example_1,2,3)

1 Ответ

2 голосов
/ 08 декабря 2011

Это должно сработать. Очевидно, вам не нужен блок WITH, я просто использовал его для имитации ваших данных, поэтому ваш запрос начинался бы с «select Category ...»

with auto_parts as
(
select 'Tires' as Category,'Michelin' as Manufacturer_id, 'Pilot Pro' as part_name from dual union all 
select 'Tires' as Category,'Michelin' as Manufacturer_id, 'Power One' as part_name from dual union all
select 'Tires' as Category,'Bridgestone' as Manufacturer_id, 'Potenza' as part_name from dual union all
select 'Tires' as Category,'Bridgestone' as Manufacturer_id, 'Turanza' as part_name from dual union all
select 'Tires' as Category,'Bridgestone' as Manufacturer_id, 'Blizzak' as part_name from dual
)
select
    Category
    Manufacturer_id,
    count(*) cnt ,
    max(case when rn = 1 then part_name end) example_1,
    max(case when rn = 2 then part_name end) example_2,
    max(case when rn = 3 then part_name end) example_3
from (
    select category, manufacturer_id, part_name, row_number() over (partition by category, manufacturer_id order by dbms_random.value) rn
    from auto_parts
)
group by Category,Manufacturer_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...