我需要将此查询限制为1000条记录,并在TOTAL字段中显示count(),我该怎么做?

时间:2019-06-28 21:12:28

标签: sql oracle

我需要将以下查询限制为1000条记录,并在TOTAL列中显示该数字。我无法使用提取,因为在计算TOTAL之后会发生该命令。这可能吗?

SELECT M.SEQ_NBR,
COUNT(*) OVER() TOTAL, 
ROW_NUMBER() OVER(ORDER BY SEQ_NBR DESC) ROWNUMBER 
FROM MYTABLE M 
ORDER BY ROWNUMBER; 

我需要第2行如下所示,但是得到 “ ORA-00923:在预期位置找不到FROM关键字”

CASE WHEN COUNT(*) < 1000 THEN COUNT(*) ELSE 1000 END OVER() TOTAL,

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:1)

我相信这就是您想要的。

select y.*, case when total > 1000 then 1000 else total end total_revamped from 
     (select x.*,row_number() over (order by null) rownumber,count(1) over () total 
      from all_source x where 1=1) y
where rownumber <= 1000
order by rownumber
OFFSET 995 ROWS
FETCH NEXT 5 ROWS ONLY

您可以根据需要替换表/列。在1个查询中获取所需结果是完全不可能的,因为您需要首先评估所述表中的记录。这就是我们需要将查询包装到内部查询中为您进行评估的原因。

答案 1 :(得分:0)

使用子查询将行数限制为1000:

-Wconversion

答案 2 :(得分:0)

我刚刚把你的问题点了。

无法正确理解问题,但是我尝试了以下方法来帮助您。 -我只用了10行,您可以将其替换为1000。

SELECT
    SEQ_NBR,
    COUNT(*) OVER() TOTAL
FROM
    (
        SELECT
            M.SEQ_NBR
        FROM
            MYTABLE M
        ORDER BY
            SEQ_NBR DESC
        FETCH FIRST 10 ROWS ONLY
    );

db<>fiddle demo

干杯!