#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. Да, вы абсолютно правы! Спасибо за решение!