2014-04-11 5 views
0

У меня есть база данных Access, которая ссылается на Excel для проекта базы данных колледжа. Цель состоит в том, чтобы исправить неверные/неполные данные перед импортом с помощью запросов Update/SQL. В частности, есть один элемент, который является полем, содержащим статус заказа. Если заказ завершен = Завершен, если в заказе отсутствует несколько частей = Базовый порядок и ничего вообще = Открыть. Проблема, которую я имею, состоит в том, что на одном идентификаторе PO есть несколько частей, что затрудняет определение того, является ли заказ отстающим, поскольку 2/5 части могут быть полными, в то время как 3/5 могут быть на отсталости. Любые идеи о том, как я могу заставить доступ автоматически устанавливать статус заказа по умолчанию или это длинный sql-запрос?Access Update не работает

Благодаря

+0

Что вы подразумеваете под несколькими частями? Можете ли вы показать соответствующую схему и то, что у вас есть до сих пор? – Goose

+0

http://postimg.org/image/i5llhcaf7/ – Treevar

+0

В основном каждый номер заказа на поставку привязан к POItemID, который идентифицирует, какие части заказаны. Когда вы расширяете список, вы увидите историю получения. То, что я пытаюсь сделать, определяется на основе этого, если заказ завершен, открыт (ничего не получен) или не зарегистрирован (не полностью принят). Когда я делаю запрос доступа и номер заказа на поставку имеет несколько идентификаторов элементов, я не нашел способ определить статус заказа – Treevar

ответ

0

С SQL вы можете вернуть запрос, чтобы найти статус заказа, используя CASE заявление. Я не уверен, что имена таблиц/столбцов в родительской таблице вы имеете, но вы, вероятно, можете настроить его здесь (я только при условии, столбцов идентификации):

SELECT P.Id, P.Name, "Status" = 
    CASE 
     WHEN R.QuantityReceived < I.QuantityOrdered THEN 'Backorder' 
     WHEN R.QuantityReceived = I.QuantityOrdered THEN 'Complete' 
     WHEN R.QuantityReceived > I.QuantityOrdered THEN 'Open' 
    END 
FROM PurchaseOrders P INNER JOIN POItem I on P.PurchaseOrderId = I.PurchaseOrderId 
         INNER JOIN POReceipt R on I.ItemId = R.ItemId 

Итак, сначала вы должны присоединиться к вашей таблице для получения связанных записей (это также предполагает, что есть только один из них), затем используйте оператор CASE, чтобы вернуть значение, которое вы ищете, на основе сравнения полей.

+0

Спасибо, Гусь! У меня есть по одной таблице. (Один с PO #) (один с POItem #) (один с таблицей приема) Я переключу Access to SQL view, чтобы сделать это, и использовать CASE, и он должен начать меня! – Treevar