我有一个名为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
肯定这样做的时候我会打电话给整个桌子。我不想单独插入每条记录导致不同的NDC号太大。
总而言之,我不想在NDC列中包含这些字符串,而是希望数字中相同的NDC在整个表中具有相同的唯一编号。
答案 0 :(得分:0)
试试这个: -
;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;
答案 1 :(得分:0)
检查一下,
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
答案 2 :(得分:0)
;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