如何以有限的值递增

时间:2018-10-01 06:46:26

标签: sql sql-server sql-server-2012

大家好,我正在处理的表中有大约200万条记录,我想基于acc_no添加两列PageNo和serialNo

例如:-

acc_no PageNo SerialNo
abc1   0001   0001
cbf2   0001   0002
.
.
zcd6   0001   9999 

一旦SerialNo达到9999,则PageNo从0002开始

eg:- 
acc_no PageNo SerialNo
abc1   0002   0001
cbf2   0002   0002
.
.
zcd6   0002   9999

等等  我尝试过

Select right('0000'+cast(ROW_NUMBER() over(order by acc_no) as varchar(100)),4) PageNo,acc_no from [table Name] 

但是我没有得到该怎么做需要帮助

2 个答案:

答案 0 :(得分:3)

使用此

select acc_no, ((rno-1) /9999) +1 pageNo,  ((rno-1) % 9999) + 1 SerialNo
from (
    SELECT acc_no , (ROW_NUMBER() over(order by acc_no )) rno
    FROM [table Name]
) t

答案 1 :(得分:2)

您可以尝试以下方法:

SELECT 
    Acc_No, 
    ((ROW_NUMBER() OVER (ORDER BY Acc_No) - 1) / 9999 + 1) AS PageNo,
    ((ROW_NUMBER() OVER (ORDER BY Acc_No) - 1) % 9999 + 1) AS SerialNo
FROM [Table Name]

PageNoSerialNo列以数字形式返回,因此您需要按预期进行转换,例如SELECT FORMAT(1, '0000') -- 0001