在sql中为多个相同记录添加唯一编号

时间:2014-02-06 04:40:38

标签: 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

肯定这样做的时候我会打电话给整个桌子。我不想单独插入每条记录导致不同的NDC号太大。

总而言之,我不想在NDC列中包含这些字符串,而是希望数字中相同的NDC在整个表中具有相同的唯一编号。

3 个答案:

答案 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;

SQL FIDDLE

答案 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