Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为sql中的多个相同记录添加唯一编号_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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

为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 当然,在这样做

我有一个名为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具有相同唯一编号的数字

试试这个:-

  ;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