2013-12-19 1 views
0

내 데이터베이스 "이름"및 "Id"에 두 개의 열이 있습니다.레코드를 비교하고 sqlserver에서 값을 할당하는 방법

NAME | ID  
-----+----------- 
jhon | 0 
-----+----------- 
kim | 0 
-----+----------- 
alex | 0 
-----+----------- 
jhon | 0 
-----+----------- 
alex | 0 
-----+----------- 
max | 0 
-----+----------- 

현재 "id"는 모두 0으로 지정되었습니다. 한 번 이상 발생하는 레코드에 동일한 ID (임의의 값)를 할당하는 저장 프로 시저 또는 쿼리를 작성하려고합니다. 다른 레코드의 ID는 0입니다. 예를 들어 john과 Alex는 두 번 발생합니다. 그래서 그들의 ID는 다른 레코드의 ID가 동일하게 유지되어야합니다. 밖으로 원하는 여기 내 샘플되고

을 넣어
NAME | ID  
-----+----------- 
jhon | 25 
-----+----------- 
kim | 0 
-----+----------- 
alex | 12 
-----+----------- 
jhon | 25 
-----+----------- 
alex | 12 
-----+----------- 
max | 0 
-----+----------- 
나는 모든 ID를,과 같이 얻을 조항에 의해 그룹을 사용하십시오

답변

0

:

select 
    Name, 
    yourRandomId() 
from YourTable 
group by Name 
having count(1) > 1 

당신은 다음 간단한 updateselect을 사용할 수 있습니다 이 결과 세트의 모든 행에 대한 ID를 설정하는 명령입니다.

더 완벽한 예는 다음과 같이 보일 수 있습니다

with ids as 
(
    select 
     Name, 
     yourRandomId() as [NewId] 
    from YourTable 
    group by Name 
    having count(1) > 1 
) 
update T 
set [Id] = ids.[NewId] 
from YourTable T 
inner join ids on T.[Name] = ids.[Name]; 
+0

솔루션이 정확하지 않은하지만이 목표에 아주 가까운 저를하게 ... 제가 가지고 다시 –

+0

을 현재의 문제를 설명하자 저를 도와주세요 내 자신의 질문에 대답 해주세요. –

관련 문제