表定义:
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
不知道你这个问题是否已经解决, 如果还没有解决的话:我可以帮助你解决这个问题。
要计算页号和总页数,你可以使用窗口函数和聚合函数来实现。下面是一个示例的解决方案,适用于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
即可获得包含页号、总页数的结果。
希望这个解决方案能满足你的需求。如果你有任何问题,请随时提问。