2017-11-01 24 views
2

テーブルの顧客の一覧があり、それぞれの番号を割り当てて別のテーブルに保存したいとします。 ただし、シーケンスは毎月再起動する必要があります。SQL Serverの条件付きシーケンス番号

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 | 
-------------------------- 

助けてください。前もって感謝します。

+0

ような何かを行うことができます 'INSERT INTOを行うと仮定tblSerialNo'んでしょうか? – Salman

答えて

2

あなたORDER BY句の前にPARTITION BYを追加します。

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

'insert'と' select'がどのように連動するのか説明できますか? – Salman

0
INSERT INTO tblSerialNo 
SELECT CustomerNo 
     ,FORMAT(getdate(), 'yyyyMM') 
     ,ROW_NUMBER()OVER(Partition By FORMAT(getdate(), 'yyyyMM') Order By CustomerNo ASC)As SerialNo 
FROM tblCustomer 
1

あなたはこの

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