2017-04-06 45 views
2

我有一个查询:在列表中的每个项目,甲骨文的PL/SQL

select sq1.* from (
    select * from table1 
    where type = '1' 
    order by name 
) sq1 
where rownum <= 10; 

,但我要运行这个列表类型2,3,A,B,C了。有没有办法做这样的事情?

my @list = ('1', '2', '3', 'a', 'b', 'c'); 
for each my $item in @list { 
    select sq1.* from (
     select * from table1 
     where type = $item 
     order by name 
    ) sq1 
    where rownum <= 10; 
} 

(是的,我的代码的Perl编写的。这是我所知道的了。)

+0

所以,你要的前10行每类?确切地说, –

+0

!我将尝试弄清楚如何使用查询加载数组列表。我可以在Perl中完成所有这些工作,但只要在查询中使用它就简单多了。 – UpTide

+0

那么你想要一个包含60个项目的单个结果集? (例如,类型1的前10位,类型2的前10位等)或者您是否需要将这些返回为10个单独的集合? –

回答

1
SELECT sq1.* FROM (
    SELECT 
     tbl.*, 
     ROW_NUMBER() OVER (PARTITION BY type ORDER BY name) AS rnk 
    FROM table1 tbl 
    WHERE type IN ('1', '2', '3', 'a', 'b', 'c') 

) sq1 
WHERE rnk <= 10;