MSAccess поиск несогласованных записей

#sql #ms-access #join #sum #subquery

#sql #ms-access #Присоединиться #сумма #подзапрос

Вопрос:

У меня есть таблица INVOICES со столбцами InvoiceNAME, InvoiceSUM и другими элементами InvoiceItems со столбцами InvoiceNAME, ItemName, ItemPrice и ItemQty. Таблицы, соединенные с помощью полей InvoiceNAME.

Я хотел бы выбрать все строки из таблицы INVOICES, где InvoiceSUM не равен СУММЕ ItemPrice * ItemQty, связанной с InvoiceNAME. Другими словами, я хотел бы перечислить несогласованные записи, в которых сумма счета не равна общей сумме товаров.

Ответ №1:

Один метод использует коррелированный подзапрос:

 select i.*
from invoices as i
where i.invoicesum <> (select sum(ii.price * ii.quantity)
                       from INVOICEitems as ii
                       where ii.InvoiceNAME = i.InvoiceNAME
                      );
  

Комментарии:

1. То есть, спасибо! (Мне нужно исправить i.ItemName на i. ИДЕНТИФИКАТОР, чтобы избежать несоответствия типов, но работает как шарм, спасибо!)

Ответ №2:

Возможно, вы захотите также отобразить значение из элементов заказа в результирующем наборе. Если это так, то объединение является более подходящим:

 select i.*, ii.item_sum
from invoices as i
inner join (
    select invoice_name, sum(item_qty * item_price) as item_sum
    from invoice_items
    group by invoice_name
)  as ii on ii.invoice_name = i.invoice_name
where i.invoice_sum <> ii.item_sum
  

Комментарии:

1. Да, вы абсолютно правы! Спасибо за решение!