ОБНОВИТЬ поле в одной таблице с суммой другой - PullRequest
0 голосов
/ 08 марта 2012

Я пытаюсь установить значение поля в таблице равным СУММЕ другого набора полей в другой таблице:

UPDATE table1 
SET fieldToUpdate = 
(
    SELECT SUM(fieldToSum) FROM table2
) 
WHERE thirdField = 'A'

, но мне не повезло.Я видел много примеров использования объединений, но мои 2 таблицы никак не связаны между собой.

Спасибо

Ответы [ 3 ]

4 голосов
/ 08 марта 2012

Хотя подзапрос должен работать, вы можете разбить его следующим образом:

DECLARE @s INT;

SELECT @s = SUM(fieldToSum) FROM dbo.table2;

UPDATE dbo.table1
SET fieldToUpdate = @s
WHERE fieldToUpdate = 'A';
1 голос
/ 08 марта 2012

Поскольку ваши таблицы не связаны, похоже, что то, что вы уже написали, должно работать. Во всех строках таблицы table с fieldToUpdate = 'A' столбец fieldToUpdate будет иметь сумму всех полей fieldToSum в table2. Может быть, вы можете уточнить свой вопрос для лучшего ответа? Например, что именно является проблемой, которую вы получаете, или образец набора данных и ожидаемые результаты

UPDATE:

Исходя из ваших новых комментариев, если предыдущее значение равно NULL, то выполнение что-то вроде fieldToUpdate = [ANY VALUE] не приведет к возвращению строк. Вам нужно будет использовать fieldToUpdate IS NULL. Или вы можете оставить =, если сделаете что-то вроде этого: ISNULL(fieldToUpdate, 'A') = 'A'.

Наконец, в качестве меры отладки вы можете проверить @@ROWCOUNT после обновления, чтобы увидеть, обновляет ли оно что-либо (что подтвердило бы необходимость IS NULL).

0 голосов
/ 09 марта 2012

Как указано в моем комментарии выше, я пытался обновить fieldToUpdate значением, превышающим ширину этого столбца. Спасибо всем за помощь.

...