我有以下SQL语句:
select
row_number() over(),
car, group, yearout
from (select..... )inner
where year(inner.yearout) between '2010' and '2030'
order by inner.group)temp
输出就像
1 test1 1 2010
2 test2 1 2010
3 test3 1 2012
4 test1 2 2010
5 test1 3 2011
等等。
还有一个名为outerno的表格,其填充方式如下:
no yearo amnt
1 2010 10
2 2010 15
3 2010 5
4 2010 10
5 2010 15
6 2010 8
1 2011 4
2 2011 15
等等。
表中每年有6组。
现在问题是我需要限制查询的输出,如outerno表中所述。 因此,对于第1组,我需要2010年的前10行,对于第2组,我需要2010年的前15行,依此类推。对于每年和每组,outerno都有一个值。
我尝试使用row_number但我不知道如何以这种方式限制输出,因为我需要例如行1-10,50-65,83-88等等。
关于如何做到这一点的任何想法?
提前感谢您的帮助。
TheVagabond
答案 0 :(得分:2)
您可以使用ROW_NUMBER()为每组提供记录号。然后添加WHERE子句以仅获取所需数字的行号。在ROW_NUMBER的ORDER BY中,您可以指定哪些记录更适合。
select row_number() over (), car, group, yearout
from
(
select
row_number() over (partition by inner.group, inner.yearout order by inner.car) as rn,
inner.car, inner.group, inner.yearout
from (select..... ) inner
where inner.yearout between '2010' and '2030'
order by inner.group
) all_records
where all_records.rn <=
(
select amnt
from outerno
where outerno.year = all_records.yearout
and outerno.no = all_records.group
);
BTW:我不会选择group
作为列名,因为它是SQL中的保留字。