Обновить подмножество данных в sqlserver - PullRequest
0 голосов
/ 15 апреля 2009

Мне дали следующий запрос.

Пожалуйста, передайте 7% текущих контактов, зарегистрированных каждому из торговых партнеров, новому торговому партнеру («Питер»).

Я решил собрать итоговые записи по каждому торговому агенту и рассчитать 7% записей.

Например У Давида 200 200/7% = 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()
)

Есть идеи, где я иду не так? Любая помощь, высоко ценится.

Ответы [ 3 ]

1 голос
/ 15 апреля 2009

Попробуйте это:

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 голос
/ 15 апреля 2009

Почему бы не использовать 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()
)
0 голосов
/ 15 апреля 2009

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()
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...