基于另一列的SQL自动填充ID列

问题描述 投票:0回答:1

我有一个工作流程,其中使用源表填充目标表。我尝试在下面的代码中模拟此工作流程。

-- 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一个新的数字。有可能吗?

谢谢

sql sql-server uniqueidentifier
1个回答
0
投票

可以使用dense_rank()来实现。

SELECT dense_rank() over (order by CampaignName) as rn, CampaignName, CustomerNumber
FROM #SourceTable
© www.soinside.com 2019 - 2024. All rights reserved.