2014-02-06 3 views
0

필자는 빈번하게 발생하는 여러 레코드가있는 열 NDC가있는 pub이라는 큰 테이블 하나를 가지고 있습니다. 먼저 고유 한 NDC에 대한 순차 번호를 만들고 싶습니다. 예를 들어 (1) 원래 다음 (2) 별개 NDC. 이 예 (0,1,2,3,4) I 숫자에 의해 원래 NDC 열을 나타내는 새로운 컬럼을 생성하도록 후SQL에서 복수 레코드에 대해 고유 한 번호 추가

에 대한 구별 NDC

(1) 
NDC: 
A 
B 
C 
D 
A 
A 
C 
V 
B 
(2) 
NDC: 
A 
B 
C 
D 
V 

시퀀스 번호. 각 NDC는 현재 고유 번호로 표시됩니다. (1) NDC를 보면 필요한 컬럼은 전체 테이블을 호출하는 동안 확실히

newcolumn 
0 
1 
2 
3 
0 
0 
2 
4 
1 

입니다. 개별 NDC 번호가 너무 커서 각각의 레코드를 삽입하고 싶지 않습니다.

NDC 열에 이러한 문자열을 사용하는 대신 전체 테이블에서 동일한 NDC가 동일한 고유 번호를 갖는 숫자를 원합니다.

+1

난 당신이 SQL Server에 대한 ROW_NUMBER() 함수와 공통 테이블 식에 대해 배울 것이 좋습니다. 이 두 가지를 아는 것만으로도 퍼즐을 풀 수 있습니다. – cha

답변

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

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 
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 
관련 문제