2015-11-17 2 views
0

У меня есть две таблицы («Недостатки», «Заказы»). Недостатки содержат каждый материал один раз, Заказы - все материальные заказы. Я пытаюсь обновить поле нехватки CurrentWeek суммой всех заказов материала из Заказов.Таблица обновлений SQL с итоговыми результатами

Я не являюсь гуру SQL, и это меня точит. У меня есть googled вещи, но я не могу заставить ничего работать.

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

Любая помощь очень ценится!

+2

Покажите нам, какой код вы пробовали. Это поможет нам создать основу для ответа. –

+0

'SELECT Orders.Material, Sum (Orders.Quantity) AS SumOfQuantity FROM Orders WHERE (((Orders.Plant) =" N.Amer ") AND ((Left ([Orders]. [Order_Number], 4)) <> «NA01») AND ((Год ([Ship_Date]) * 53 + DatePart («ww», [Ship_Date])) = Год (Дата()) * 53 + DatePart («ww», Date()))) GROUP BY Orders.Material; 'Это запрос выбора, который у меня есть, который дает мне то, что я хочу, и группирует его ... Я пытаюсь передать эти сгруппированные суммы в таблицу недостатков ... Материал - это связь между обеими таблицами. Я попробую еще несколько и посмотрю, что я могу опубликовать. – user3417575

ответ

0

Сначала введите SUM(), а затем выполните обновление. Что-то, как показано ниже (** Это демонстрационный запрос, но надеюсь, что вы поняли суть)

update Shortages s 
join (
select orderid, sum(order_qty) as total_qty 
from orders 
group by orderid) xxx on s.orderid = xxx.orderid 
set s.CurrentWeek = xxx.total_qty; 
1

Это звучит, как вы хотите что-то вроде этого:

UPDATE Shortages 
    SET CurrentWeek = (SELECT SUM(quantity) 
         FROM Orders 
         WHERE Orders.Material = Shortages.Material 
         AND <which records in Orders count toward the current Shortages record>) 
WHERE <which records in Shortages you want to update> 

Очевидно, что вам нужно изменить его с имена соответствующих столбцов.

+0

также может потребоваться выполнить дополнительную фильтрацию в WHERE, чтобы ограничить его «текущей недели» –

+0

Хорошо я попытался 'Update Нехватки Set CurrentWeek = (SELECT Orders.Material, Sum (Orders.Quantity) AS SumOfQuantity FROM Orders WHERE (((Orders.Plant) = "N.Amer") И ((Left (Orders.Order_Number, 4)) <> "NA01") И ((Год ([Ship_Date]) * 53 + DatePart ("ww ", [Ship_Date])) = Year (Date()) * 53 + DatePart (" ww ", Date()))) GROUP BY Orders.Material)' Но теперь мне говорят, что я «написал подзапрос который может возвращать более одного поля, не используя зарезервированное слово EXISTS в предложении основного запроса. " Возможно, стоит отметить, что на данный момент я использую Microsoft Access (если это помогает). – user3417575

+0

Как говорится, вы можете иметь только один столбец в вашем подзапросе. Во внутреннем select вы указали 'Orders.Material, Sum (Orders.Quantity) AS SumOfQuantity', который представляет собой два столбца. Оператор 'UPDATE' работает иначе, чем вы думаете: хотя он обновляет ВСЕ записи, сам оператор определяет, как изменить запись EACH. В основном: для каждой записи в разделе «Недостатки» установите столбец CurrentWeek на это значение. Подзапрос должен возвращать одно значение, поэтому я ограничил его «WHERE», чтобы отфильтровать его до «одного» материала, т. Е. «Материал для текущей строки обновляется», «Недостатки». Материал –

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