Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL从分组数据中添加示例_Sql_Database_Oracle - Fatal编程技术网

SQL从分组数据中添加示例

SQL从分组数据中添加示例,sql,database,oracle,Sql,Database,Oracle,您好,我有一个关于oracle SQL的小问题。 我有桌上汽车配件: 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(*) c

您好,我有一个关于oracle SQL的小问题。 我有桌上汽车配件:

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列(上面显示了一个示例输出,列为示例_1,2,3)

这应该可以解决问题。显然,您不需要WITH块,我只是用它来模拟您的数据,因此您的查询将从“选择类别…”开始

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;