为sql中的多个相同记录添加唯一编号
我有一个名为pub的大表,其中列NDC有多条记录,其中一些记录经常出现。首先,我想为不同的NDC创建一个序列号。例如(1)中的原始数据,然后(2)中的不同NDC为sql中的多个相同记录添加唯一编号,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个名为pub的大表,其中列NDC有多条记录,其中一些记录经常出现。首先,我想为不同的NDC创建一个序列号。例如(1)中的原始数据,然后(2)中的不同NDC (1) NDC: A B C D A A C V B (2) NDC: A B C D V 本例中不同NDC的序列号(0,1,2,3,4) 之后,我想创建一个新列,用数字表示原始NDC列。现在,每个国家数据中心都将以唯一编号呈现。查看(1)NDC,需要的列为 newcolumn 0 1 2 3 0 0 2 4 1 当然,在这样做
(1)
NDC:
A
B
C
D
A
A
C
V
B
(2)
NDC:
A
B
C
D
V
本例中不同NDC的序列号(0,1,2,3,4)
之后,我想创建一个新列,用数字表示原始NDC列。现在,每个国家数据中心都将以唯一编号呈现。查看(1)NDC,需要的列为
newcolumn
0
1
2
3
0
0
2
4
1
当然,在这样做的时候,我会给整个桌子打电话。我不想单独插入每条记录,因为不同的NDC编号太大
总之,我不希望在NDC列中包含这些字符串,而是希望在整个表中具有相同NDC具有相同唯一编号的数字 试试这个:-
;with cte as
(Select distinct NDC from YourTable
),cte2 as
(Select NDC,
rn =Row_number() over (order by NDC ) - 1
from cte
)
update t
Set t.NewColumn = c.rn
from YourTable t
inner join Cte2 c
on t.NDC = c.NDC;
检查这个
Declare @t1 table(id int identity(1,1),NDC varchar(10))
insert into @t1 values('A'),('B'),('C'),('D'),('A'),('A'),('C'),('V'),('B')
;with cte as
(select distinct ndc from @t1),
cte1 as
(select ndc, ROW_NUMBER()over(order by ndc)rn from cte)
select b.NDC,rn-1 rn from cte1 a
inner join @t1 b on a.NDC=b.ndc
order by b.id
我建议您了解SQL Server的ROW_NUMBER()函数和常用表表达式。了解这两件事就足以解决你的难题
;with cte as
(Select t.NDC, t.NewColumn,num.n from Table1 t
INNER JOIN
(SELECT DENSE_RANK() OVER( ORDER BY NDC) AS n, NDC FROM Table1) num
ON num.NDC = t.NDC
)
UPDATE cte SET NewColumn = n