使用不同的标准限制输出
Limiting output with different criterias
我有以下 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 的 table 填充如下:
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
等等。
每年table有6组。
现在的问题是我需要按照 outerno table 中所述限制查询的输出。
所以我需要第 1 组 2010 年的前 10 行,第 2 组需要 2010 年的前 15 行,依此类推。对于每一年和每一组,outerno 中都有一个值。
我尝试使用 row_number 但我不知道如何以这种方式限制输出,因为我需要例如第 1-10、50-65、83-88 行等.
知道怎么做吗?
在此先感谢您的帮助。
流浪汉
您将使用 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
);
顺便说一句:我不会选择 group
作为列名,因为它是 SQL 中的保留字。
我有以下 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 的 table 填充如下:
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
等等。
每年table有6组。
现在的问题是我需要按照 outerno table 中所述限制查询的输出。 所以我需要第 1 组 2010 年的前 10 行,第 2 组需要 2010 年的前 15 行,依此类推。对于每一年和每一组,outerno 中都有一个值。
我尝试使用 row_number 但我不知道如何以这种方式限制输出,因为我需要例如第 1-10、50-65、83-88 行等.
知道怎么做吗?
在此先感谢您的帮助。
流浪汉
您将使用 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
);
顺便说一句:我不会选择 group
作为列名,因为它是 SQL 中的保留字。