Sql server SQL Server条件序列号

Sql server SQL Server条件序列号,sql-server,Sql Server,我有一个表中的客户列表,我想给每个客户分配一个序列号,并将其保存到另一个表中。 但是,序列应该每月重新启动 目前,我有以下问题: INSERT INTO tblSerialNo SELECT CustomerNo ,FORMAT(getdate(), 'yyyyMM') ,ROW_NUMBER() OVER (ORDER BY CustomerNo ASC) AS SerialNo FROM tblCustomer 但是SerialNo列上的顺序会继续,即使月份发生了

我有一个表中的客户列表,我想给每个客户分配一个序列号,并将其保存到另一个表中。 但是,序列应该每月重新启动

目前,我有以下问题:

INSERT INTO tblSerialNo
SELECT CustomerNo
      ,FORMAT(getdate(), 'yyyyMM')
      ,ROW_NUMBER() OVER (ORDER BY CustomerNo ASC) AS SerialNo 
FROM tblCustomer
但是SerialNo列上的顺序会继续,即使月份发生了变化

电流输出:

--------------------------
|Customer|Month |SerialNo|
|--------+------+--------|
|17000001|201710|00001   |
|17000002|201710|00002   |
|17000003|201710|00003   |
|17000004|201710|00004   |
|17000005|201710|00005   |
|17000001|201710|00006   |
|17000002|201710|00007   |
|17000003|201710|00008   |
|17000004|201710|00009   |
|17000005|201710|00010   |
|17000001|201711|00011   |
|17000002|201711|00012   |
|17000003|201711|00013   |
|17000004|201711|00014   |
|17000005|201711|00015   |
--------------------------
期望输出:

--------------------------
|Customer|Month |SerialNo|
|--------+------+--------|
|17000001|201710|00001   |
|17000002|201710|00002   |
|17000003|201710|00003   |
|17000004|201710|00004   |
|17000005|201710|00005   |
|17000001|201710|00006   |
|17000002|201710|00007   |
|17000003|201710|00008   |
|17000004|201710|00009   |
|17000005|201710|00010   |
|17000001|201711|00001   |
|17000002|201711|00002   |
|17000003|201711|00003   |
|17000004|201711|00004   |
|17000005|201711|00005   |
--------------------------

请帮忙。提前感谢。

在您的
订购依据
条款之前添加
分区依据

INSERT INTO tblSerialNo
SELECT CustomerNo
      ,FORMAT(getdate(), 'yyyyMM')
      ,ROW_NUMBER() OVER (PARTITION BY FORMAT(getdate(), 'yyyyMM') ORDER BY CustomerNo ASC) AS SerialNo 
FROM tblCustomer

你可以这样做

INSERT INTO tblSerialNo
select customerno,[Month],
ROW_NUMBER() OVER (partition by [Month] ORDER BY CustomerNo ASC) AS SerialNo  from 
(
SELECT CustomerNo ,FORMAT(getdate(), 'yyyyMM')as [Month] FROM tblCustomer
)as a

INSERT-to-tblSerialNo
应该做什么?你能解释一下
INSERT
select
是如何协同工作的吗?
INSERT INTO tblSerialNo
select customerno,[Month],
ROW_NUMBER() OVER (partition by [Month] ORDER BY CustomerNo ASC) AS SerialNo  from 
(
SELECT CustomerNo ,FORMAT(getdate(), 'yyyyMM')as [Month] FROM tblCustomer
)as a