2009-04-15 5 views
0

다음 요청이 왔습니다.sqlserver에서 데이터의 하위 집합 업데이트

각 판매 사원에게 등록 된 현재 연락처의 7 %를 새로운 판매 사원 ('피터')에게주십시오.

내가 결정한 것은 각 판매 직원의 총 레코드를 얻고 레코드의 7 %를 계산하는 것이 었습니다.

예를 들어 다윗은 내가 데이터를 선택할 수 있지만 갱신 위해 고군분투하고, 이제 200 7분의 200 % = 14

SELECT TOP 14 ContactAssociate 
FROM tb_Contact 
WHERE tb_Contact.ContactAssociate = 'David' 
ORDER BY NEWID() 

있다; 나는 이것이 그것을 할 것이지만 기쁨은 없을 것이라고 생각했다.

UPDATE tb_Contact 
SET ContactAssociate = 'Peter' 
IN 
(
SELECT TOP 14 ContactAssociate 
FROM tb_Contact 
WHERE tb_Contact.ContactAssociate = 'David' 
ORDER BY NEWID() 
) 

내가 잘못 가고있는 아이디어가 있습니까? 도움을 주시면 감사하겠습니다.

답변

0

PK_Of_tb_Contact - 당신의 tb_Contact 테이블의 기본 키

UPDATE tb_Contact 
SET ContactAssociate = 'Peter' 
where PK_Of_tb_Contact 
IN 
(
SELECT TOP 14 PK_Of_tb_Contact 
FROM tb_Contact 
WHERE tb_Contact.ContactAssociate = 'David' 
ORDER BY NEWID() 
) 
1

이 시도 :

UPDATE c 
SET ContactAssociate = 'Peter' 
FROM tb_Contact c 
INNER JOIN (
    SELECT TOP 14 ContactAssociate FROM tb_Contact 
    WHERE tb_Contact.ContactAssociate = 'David' 
) q ON c.ContactAssociate = q.ContactAssociate 

것은 당신이 당신이 원하는 레코드를 업데이트하는 경우 시도하려는 경우, 당신은이 작업을 수행 할 수 있습니다

SELECT c.* 
FROM tb_Contact c 
INNER JOIN (
    SELECT TOP 14 ContactAssociate FROM tb_Contact 
    WHERE tb_Contact.ContactAssociate = 'David' 
) q ON c.ContactAssociate = q.ContactAssociate 

위에서 볼 수 있듯이 업데이트 나 확인 간의 유일한 변경은 FROM 절 앞에있는 줄뿐입니다.

1

TOP 7 PERCENT 또는 TOP 7 PERCENT WITH TIES을 사용하지 않으시겠습니까?

DECLARE @sample int 
SET @sample = 7 

UPDATE tb_Contact 
SET ContactAssociate = 'Peter' 
where PK_Of_tb_Contact 
IN 
(
SELECT TOP (@sample) PERCENT PK_Of_tb_Contact 
FROM tb_Contact 
WHERE tb_Contact.ContactAssociate = 'David' 
ORDER BY NEWID() 
) 
관련 문제