请考虑配置单元表-TableA,如下所述。
当我们要获取“所有”与where子句中的条件匹配的行时,这种基本的SQL语法可以正常工作。我想将where子句的每个匹配项的返回行限制为一个数字-N。
让我举例说明:
(1) 考虑此表:
TableA
c1 c2
1. a
1 b
1 c
2. d
2. e
2. f
(2)考虑以下查询:
SELECT c1, c2
FROM TableA
WHERE c1 in (1,2)
(3)您可以想象,它将产生以下结果:
Actual Results:
c1 c2
1. a
1 b
1 c
2. d
2. e
2. f
(4) 所需结果:
c1 c2
1. a
1 b
2. d
2. e
问题:如何在#2)中修改查询以在#4)中获得所需的输出提示。
答案 0 :(得分:1)
c1仅2个值
SELECT c1, c2 FROM TableA WHERE c1 = 1 ORDER BY c2 LIMIT 2
UNION ALL
SELECT c1, c2 FROM TableA WHERE c1 = 2 ORDER BY c2 LIMIT 2
超过2个值,请使用rank()
select c1,c2 from
(
select c1,c2,rank() over (partition by c1 order by c2) as rank
from TableA
) t
where rank < 3;
答案 1 :(得分:1)
您可以使用row_number
函数执行此操作。
select c1,c2
from (SELECT c1, c2, row_number() over(partition by c1 order by c2) as rnum
FROM TableA
--add a where clause as needed
) t
where rnum <= 2