I am trying to combine duplicate entries in a data table and give them a new number.
Here is an example dataset ( runnable copy )
declare @tmpTable table (ID Varchar(1), First varchar(4), Last varchar(5), Phone varchar(13), NonKeyField varchar(4)) insert into @tmpTable select 'A', 'John', 'Smith', '(555)555-1234', 'ASDF' insert into @tmpTable select 'B', 'John', 'Smith', '(555)555-1234', 'GHJK' insert into @tmpTable select 'C', 'Jane', 'Smith', '(555)555-1234', 'QWER' insert into @tmpTable select 'D', 'John', 'Smith', '(555)555-1234', 'RTYU' insert into @tmpTable select 'E', 'Bill', 'Blake', '(555)555-0000', 'BVNM' insert into @tmpTable select 'F', 'Bill', 'Blake', '(555)555-0000', '%^&*' insert into @tmpTable select 'G', 'John', 'Smith', '(555)555-1234', '!#RF' select row_number() over (partition by First, Last, Phone order by ID) NewIDNum, * from @tmpTable order by ID
Now he gives me the results
NewIDNum ID First Last Phone NonKeyField -------------------- ---- ----- ----- ------------- ----------- 1 A John Smith (555)555-1234 ASDF 2 B John Smith (555)555-1234 GHJK 1 C Jane Smith (555)555-1234 QWER 3 D John Smith (555)555-1234 RTYU 1 E Bill Blake (555)555-0000 BVNM 2 F Bill Blake (555)555-0000 %^&* 4 G John Smith (555)555-1234 !
However, this is the opposite of what I want, NewIDNum resets the counter every time it finds a new key combination. I want all the same combinations to have the same identifier. Therefore, if he behaved the way I wanted, I would get the following results
NewIDNum ID First Last Phone NonKeyField -------------------- ---- ----- ----- ------------- ----------- 1 A John Smith (555)555-1234 ASDF 1 B John Smith (555)555-1234 GHJK 2 C Jane Smith (555)555-1234 QWER 1 D John Smith (555)555-1234 RTYU 3 E Bill Blake (555)555-0000 BVNM 3 F Bill Blake (555)555-0000 %^&* 1 G John Smith (555)555-1234 !
What is the right way to get the results I want?
I did not include this requirement in the original message : I need NewIDNum to create the same numbers in subsequent runs of this query for existing rows if more rows are added (assuming all new rows will have a higher identifier βvalueβ if the order is executed in Identifier column)
So, if at the last date the following was done
insert into @tmpTable select 'H', 'John', 'Smith', '(555)555-1234', '4321' insert into @tmpTable select 'I', 'Jake', 'Jons', '(555)555-1234', '1234' insert into @tmpTable select 'J', 'John', 'Smith', '(555)555-1234', '2345'
running the correct query again will give
NewIDNum ID First Last Phone NonKeyField -------------------- ---- ----- ----- ------------- ----------- 1 A John Smith (555)555-1234 ASDF 1 B John Smith (555)555-1234 GHJK 2 C Jane Smith (555)555-1234 QWER 1 D John Smith (555)555-1234 RTYU 3 E Bill Blake (555)555-0000 BVNM 3 F Bill Blake (555)555-0000 %^&* 1 G John Smith (555)555-1234 !