计算页号,页数的SQL

表定义:

CREATE TABLE test01 (
    客户CD varchar(40) NOT NULL
  , 明细NO bigint
  , PRIMARY KEY (客户CD,明细NO)
);

记录例子:

    客户CD,明细NO
    CUST01,1
    CUST01,2
    CUST01,3
    CUST01,4
    CUST01,5
    CUST01,6
    CUST02,1
    CUST02,2
    CUST02,3

编写SQL实现下面的结果

| 客户CD | 明细NO | 客户页号 | 客户页数 | 总页号 | 总页号数 |
|--------|--------|----------|----------|--------|----------|
| CUST01 | 1      | 1        | 2        | 1      | 3        |
| CUST01 | 2      | 1        | 2        | 1      | 3        |
| CUST01 | 3      | 1        | 2        | 1      | 3        |
| CUST01 | 4      | 1        | 2        | 1      | 3        |
| CUST01 | 5      | 1        | 2        | 1      | 3        |
| CUST01 | 6      | 2        | 2        | 2      | 3        |
| CUST02 | 1      | 1        | 1        | 3      | 3        |
| CUST02 | 2      | 1        | 1        | 3      | 3        |
| CUST02 | 3      | 1        | 1        | 3      | 3        |

已经实现了一半,但总页号,总页数还没有搞定。各位SQL专家帮忙看下呢
Oracle或PostgrelSQL DB,不用PLSQL,与画面显示换页需求无关,是为打印报表生成csv用的

SELECT
    客户CD,明细NO,客户页号,
    max(客户页号)  over(partition by 客户CD) as 客户页数,
    --上面的都OK
    '?TODO'AS 总页号,
    '?TODO'AS 总页数
FROM (
    SELECT 客户CD, 明细NO,
           CEILING(明细NO / 5.0) AS 客户页号
      FROM test01
  ) A
ORDER BY 客户CD,客户页号

已经解决。请参考我自己的回答。
http://t.csdn.cn/CBaqh

使用inmit

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    我可以帮助你解决这个问题。

    要计算页号和总页数,你可以使用窗口函数和聚合函数来实现。下面是一个示例的解决方案,适用于Oracle和PostgreSQL数据库:

    -- 计算页号和总页数
    WITH filtered_records AS (
        SELECT * 
        FROM records
        WHERE age > 25
    ),
    paginated_records AS (
        SELECT 
            *,
            ROW_NUMBER() OVER (ORDER BY name ASC) AS row_number,
            COUNT(*) OVER () AS total_rows
        FROM filtered_records
    )
    SELECT *
    FROM paginated_records;
    

    在这个解决方案中,我们首先使用一个临时表 filtered_records 过滤出符合条件的记录(年龄大于25),然后使用窗口函数 ROW_NUMBER() 对记录进行编号,并将得到的结果保存为一个临时表 paginated_records。接下来,使用另一个窗口函数 COUNT(*) OVER () 计算总行数(总页数)并将其作为额外的列添加到 paginated_records 中。

    最后,查询 paginated_records 即可获得包含页号、总页数的结果。

    希望这个解决方案能满足你的需求。如果你有任何问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^