每第N个记录的返回行

时间:2014-07-03 20:33:01

标签: sql oracle oracle11g syntax-error

我试图在此处开发已接受答案的Oracle SQL版本:
Return row of every n'th record

到目前为止我所拥有的是:

SELECT ROW_ID, CUST_ACCT_SITE_ID
FROM
(
    SELECT CUST_ACCT_SITE_ID as CUST_ACCT_SITE_ID, ROW_NUMBER() OVER (ORDER BY CUST_ACCT_SITE_ID) AS ROW_ID
    FROM XXDMX_VOICE_CUSTOMERS_TBL
) AS t
WHERE ROW_ID % 10000 = 0   
ORDER BY CUST_ACCT_SITE_ID;

我收到错误

ERROR ORA-00933:SQL命令未正确结束

我尝试了很多变化,无法想到我做错了什么。任何想法,Oracle专家?

2 个答案:

答案 0 :(得分:2)

尝试编写如下查询:

SELECT rn, CUST_ACCT_SITE_ID
FROM (SELECT CUST_ACCT_SITE_ID as CUST_ACCT_SITE_ID,
             ROW_NUMBER() OVER (ORDER BY CUST_ACCT_SITE_ID) AS rn
      FROM XXDMX_VOICE_CUSTOMERS_TBL
     ) t
WHERE mod(rn, 10000) = 0   
ORDER BY CUST_ACCT_SITE_ID;

主要区别在于删除了表别名的as。 Oracle不允许这种语法。我还将row_id更改为其他内容,因为" rowid"在Oracle中意味着什么,它的使用可能会令人困惑(参见here)。

答案 1 :(得分:1)

在PL / SQL(" Oracle SQL"的名称)中,模数运算符使用以下语法:

WHERE MOD(ROW_ID, 10000) = 0
相关问题