Aktualisieren der Untermenge von data in sqlserver

Ich habe die folgende Anfrage erhalten.

Bitte geben Sie 7% der aktuellen Kontakte an, die jeder der Vertriebsmitarbeiter an den neuen Vertriebsmitarbeiter ("Peter") registriert sind.

Was ich beschloss, war, die Gesamtsätze für jeden Vertriebsmitarbeiter zu erhalten und 7% der Aufzeichnungen zu berechnen.

Zum Beispiel hat David 200 200/7% = 14

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

Jetzt kann ich die data auswählen, aber ich kämpfe, um sie zu aktualisieren; Ich dachte, das würde es tun, aber keine Freude

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

Irgendwelche Ideen, wo bin ich falsch? Jede Hilfe, sehr geschätzt.

PK_Of_tb_Kontakt – Primärschlüssel in der Tabelle 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() ) 

Versuche dies:

 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 

Wenn Sie versuchen möchten, wenn Sie die gewünschten datasätze aktualisieren, können Sie dies tun:

 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 

Wie Sie sehen können, ist die einzige Änderung zwischen Updates oder Schecks die Zeilen vor der FROM-Klausel.

Warum nicht TOP 7 PERCENT oder 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() )