2013-02-20 2 views
1

У меня есть 2 кода, с которыми я столкнулся. Я посмотрел на некоторые другие ответы, но был полностью сбит с толку. Вот код SQL .. (Сво Access, SQL пройти через запрос)Обновить запрос, используя Sum

UPDATE TOP (500) InventorySuppliers 
SET    BoydQuantityAvailable = SUM(Boyd0004Daily.QOH), Cost = Boyd0004Daily.Cost 
FROM   Boyd0004Daily INNER JOIN 
         InventorySuppliers ON Boyd0004Daily.LocalSKU = InventorySuppliers.LocalSKU 
WHERE  (InventorySuppliers.SupplierID = 4) AND (NOT (InventorySuppliers.BoydQuantityAvailable = SUM(Boyd0004Daily.QOH))) OR 
         (InventorySuppliers.SupplierID = 4) AND (NOT (InventorySuppliers.Cost = Boyd0004Daily.Cost)) 

Он не любит обновления на SUM (Boyd0004Daily.QOH), но для жизни меня, я гавань была в состоянии фигуры как переписать его, чтобы он сделал выбор, а затем обновление с 1 запросом.

+1

какая ошибка вы получаете? Есть ли числовое значение в 'Boyd0004Daily.QOH'? –

ответ

0

Первое, что вы хотите сделать, это получить выбор, чтобы выйти направо:

select * 
from InventorySuppliers i 
inner join (select LocalSKU, SUM(QOH) QOH_SUM, MAX(Cost) Cost --max or min 
      from Boyd0004Daily 
      group by LocalSKU) a 
     on a.LocalSKU = i.LocalSKU 
where i.SupplierID = 4 
and ((i.BoydQuantityAvailable != a.QOH_SUM)) 
    OR i.Cost != a.Cost)) 

Затем преобразуйте ваш выбор для обновления:

update i 
set i.BoydQuantityAvailable = a.QOH_SUM, 
    i.Cost = a.Cost 
from InventorySuppliers i 
inner join (select LocalSKU, SUM(QOH) QOH_SUM, MAX(Cost) Cost --max or min 
      from Boyd0004Daily 
      group by LocalSKU) a 
     on a.LocalSKU = i.LocalSKU 
where i.SupplierID = 4 
    and ((i.BoydQuantityAvailable != a.QOH_SUM)) 
     OR i.Cost != a.Cost)) 

Я думаю, что этот вопрос должен работать для вас , У меня могут быть ошибки, так как я не могу проверить ваши данные.

+0

Я скоро узнаю, если это сработает, мне пришлось немного изменить его, чтобы удалить дополнительную скобку. обновить я набор i.BoydQuantityAvailable = a.QOH_SUM, i.Cost = a.Cost из InventorySuppliers я внутреннее соединение (выберите LocalSKU, SUM (QOH) QOH_SUM, MAX (стоимость) Стоимость --max или мин от Boyd0004Daily группа по LocalSKU) а на a.LocalSKU = i.LocalSKU где i.SupplierID = 4 и ((i.BoydQuantityAvailable! = a.QOH_SUM) ИЛИ i.Cost! = a.Cost) –

+0

Я хотел благодарю вас за вашу помощь. Работает фантастично. –

1

Вам не хватает group by. Каждый раз, когда вы используете агрегированную функцию, вы должны включать группу, включающую все столбцы, которые не агрегируются.

Вы также используете SUM в своем предложении WHERE, который не будет работать. Если вы хотите фильтровать результаты на основе совокупности, вы должны вместо этого использовать HAVING.

+0

Да, я понимаю, что проблема заключается в использовании SUM в предложении WHERE, но для жизни я не могу понять, как обойти это. –

+0

Добавить 'group by' и использовать' having' вместо ... –

+0

As для группы, мне нужно сгруппировать boyd0004Daily.LocalSKU –

Смежные вопросы