2009-04-15 1 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() 
) 
関連する問題