Вычислить результат из нескольких таблиц в базе данных

У меня есть вопрос в моей разработке VB.NET POS, и я не смог найти решение самостоятельно. В настоящее время я использую VS2010 и MS Access в качестве моей базы данных.

У меня есть две таблицы базы данных, как показано ниже:

SalesReceipt(#Receipt_ID, Sales_Date, Receipt_Number, Customer_ID, Sales_BDiscount, Sales_ADiscount, Sales_Payment)

Customer(#Customer_ID, Customer_Name, Customer_Contact, Customer_Debt)

ПРИМЕЧАНИЕ: BDiscount = до скидки / ADiscount = после скидки

В моей системе у одного клиента может быть много SalesReceipt. Теперь моя проблема заключается в том, как я могу обновить правильный Customer_Debt для клиента? Моя логика обновляет Customer_Debt соответствующего клиента, зацикливая каждую строку в SalesReceipt и вычисляя долг, делая что-то вроде:

totalDebt = totalDebt + (Sales_Payment - Sales_ADiscount)

Но я не уверен, как я могу убедиться, что это только цикл и вычислить результат только для выбранного клиента. Как я могу добиться этого правильно в .NET?


person Milo Khoo    schedule 23.06.2013    source источник


Ответы (2)


Если вы хотите рассчитать totalDebt на клиента, вы можете использовать запрос

SELECT Customer_ID, sum(Sales_Payment - Sales_ADiscount) as totalDebt FROM SalesReceipt
 GROUP BY Customer_ID

Результат содержит totalDebts, агрегированные по Customer_ID, и может использоваться для обновления Customer (все циклы и вычисления выполняются механизмом базы данных).

Запрос обновления также может быть более сложным, чтобы сделать даже обновление для вас.

person IvanH    schedule 23.06.2013
comment
Сэр, спасибо за ваш ответ! Это мой запрос после тестирования, правильно ли это: SELECT Sum(Sales_ADiscount-Sales_Payment) AS totalDebt FROM SalesReceipt GROUP BY SalesReceipt.Customer_ID = ?? Он получит параметр для Customer_ID. - person Milo Khoo; 24.06.2013

Не могли бы вы просто написать запрос в своей базе данных Access, который выполняет ваш расчет (Sales_Payment - Sales_ADiscount) в вашей таблице SalesReceipt, сгруппированной по CustomerID?

person majjam    schedule 23.06.2013