我有一个工作流程,其中使用源表填充目标表。我尝试在下面的代码中模拟此工作流程。
-- creating/populating source table
create table #SourceTable(
CampaignName VARCHAR(50)
,CustomerNumber INT
)
INSERT INTO #SourceTable VALUES('Campaign1', 1111)
INSERT INTO #SourceTable VALUES('Campaign1', 2222)
INSERT INTO #SourceTable VALUES('Campaign1', 3333)
INSERT INTO #SourceTable VALUES('Campaign2', 4444)
INSERT INTO #SourceTable VALUES('Campaign2', 2222)
INSERT INTO #SourceTable VALUES('Campaign2', 1111)
-- create/populate destination table
create table #DestinationTable(
CampaignID INT
,CampaignName VARCHAR(50)
,CustomerNumber INT
)
-- Simulating populating the #DestinationTable
INSERT INTO #DestinationTable (CampaignName,CustomerNumber)
SELECT CampaignName,CustomerNumber
FROM #SourceTable
源表将以某种方式创建,但随后将以与示例代码相同的方式用于填充目标表。
目标表位于CustomerNumber级别。我想自动填充一个ID字段(无需用户输入代码),该字段将在CampaignName级别给出一个新数字。
因此,例如,我希望#DestinationTable的输出为:
CampaignID CampaignName CustomerNumber
1 Campaign1 1111
1 Campaign1 2222
1 Campaign1 3333
2 Campaign2 4444
2 Campaign2 2222
2 Campaign2 1111
但是,无论何时插入新行,我都需要自动填充CampaignID字段,例如IDENTITY
字段,但我不需要给每行指定一个数字,而是给每个CampaignName一个新的数字。有可能吗?
谢谢
可以使用dense_rank()
来实现。
SELECT dense_rank() over (order by CampaignName) as rn, CampaignName, CustomerNumber
FROM #SourceTable