Значения в одном поле в таблице из поиска в другой таблице - PullRequest
0 голосов
/ 27 марта 2012

Я использую Microsoft Access 2010 Таблицы, для которых я пытаюсь выполнить этот поиск:

StockCount

, который содержит

Unit No
Event ID
Product Name
Price
Qty Open
Qty Trnasferred
Qty Closed
Wastage
Qty Staff
Qty Sold
Total Amount Taken

и Transfer, который содержит

ID
Transaction
Event ID
Unit No
Docket ID
Product Name
Amount

В StockCount.[Qty Transferred] поле должно быть поиском, который вычисляет сумму всех Transfer.Amount, где имя продукта, идентификатор события и номер блока не совпадают в обеих таблицах.

Текущая команда SQL Iесть

SELECT Sum(Transfer.[Amount]) 
FROM Transfer, StockCount 
WHERE Transfer.[Product Name] = StockCount.[Product Name] 
    AND Transfer.[Event ID] = StockCount.[Event ID] 
    AND Transfer.[Unit No] = StockCount.[Unit No]; 

Это было помещено под опцию поиска в поле Qty Transferred,

  • Элемент управления отображением является списком
  • Тип источника строки:Таблица / Запрос
  • Источником строки является команда SQL выше

После этого значения не меняются, и я не уверен, почему.

1 Ответ

1 голос
/ 28 марта 2012

Оператор SELECT выбирает записи, но не меняет никаких данных.Ваш оператор SELECT возвращает только одно единственное значение - сумму всех сумм.Вероятно, вы хотите рассчитать итоги по [Product Name], [Event ID] и [Unit No].Выполнение этого запроса SELECT выглядит следующим образом

SELECT
    [Product Name], [Event ID], [Unit No],
    Sum(Amount) AS SumOfAmount
FROM
    Transfer
GROUP BY
    [Product Name], [Event ID], [Unit No];

К сожалению, этот запрос нельзя превратить в запрос UPDATE в Access, поскольку он содержит GROUP BY.Запрос UPDATE должен соединить этот запрос с таблицей StockCount.Полученный запрос не может быть обновлен.

Я вижу два решения этой проблемы

  1. Заполните рабочую таблицу результатом этого запроса и обновите из этой таблицы

  2. Обновите таблицу StockCount программным путем, выполняя цикл по результату запроса выше.


Я покажу первый подход здесь.Сначала создайте рабочую таблицу.

twrkTotalAmount
---------------
Product Name
Event ID
Unit No
SumOfAmount

Затем очистите таблицу (она может содержать записи из предыдущего запуска)

DELETE * FROM twrkTotalAmount;

Теперь введите суммы

INSERT INTO twrkTotalAmount
    ([Product Name], [Event ID], [Unit No], SumOfAmount)
SELECT
    [Product Name], [Event ID], [Unit No], Sum(Amount)
FROM
    Transfer
GROUP BY
    [Product Name], [Event ID], [Unit No];

Теперь вы можете выполнить запрос UPDATE

UPDATE
    StockCount
    INNER JOIN twrkTotalAmount
        ON (StockCount.[Product Name] = twrkTotalAmount.[Product Name]) AND
           (StockCount.[Event ID] = twrkTotalAmount.[Event ID]) AND
           (StockCount.[Unit No] = twrkTotalAmount.[Unit No])
SET
    StockCount.[Total Amount Taken] = [SumOfAmount];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...