2015-12-08 4 views
0

Это вопрос домашней работы.Школа HomeWork- Банковский счет - курсор

Customer(customer_id, customer_name, address, phone) 
Account(bank_name, account_num, balance) 
Has-Account(customer_id, bank_name, account_num) 

Я пытаюсь написать курсор, который для каждого клиента возвращает идентификатор клиента, имя, номер телефона, название банка, а сумма счета клиента в каждом банке.

CURSOR cust_balance IS 
    SELECT 

Что я пробовал:

Select customer_id, customer_name, phone, bank_name, count(account_num) over (partition by bank_name) from Customer, 
Account , Has-Account where Customer.customer_id = Has-Account.customer_id 
AND Account.account_num = Has-Account.account_num and Account.bank_name = Has-Account.bank_name 

Как рассчитать сумму счета клиента за каждый банк в этом запросе?

+0

после BANK_NAME добавить COUNT (*) над (раздел по BANK_NAME) как cust_in_bank. – Buddi

ответ

0

Чтобы использовать курсор, вам нужно будет объявить переменную для хранения интересующего вас поля. Хотя это возможно, может быть проще использовать агрегатную функцию, группировку по customer_id и некоторую область банка. Вы уже пробовали это, или это назначение строго требует использования курсора. Вообще говоря, лучше обработать этот вид операции в SELECT, чем скрипт курсора.

Я считаю, что следующий код должен сработать для вас, но у меня нет DB Engine для его проверки. Вы, конечно, можете искать с помощью функции SUM на w3 школах, но я считаю, что это является общим для большинства SQL платформ:

SELECT 
C.customer_name, 
A.bank_name, 
SUM(a.balance) AS 'balance' 
FROM Customer AS c 
    INNER JOIN Has-Account AS ha ON c.customer_id = ha.customer_id 
    INNER JOIN Account AS a ON (
     ha.bank_name = a.bank_name AND ha.account_num = a.account_num 
    ) 
GROUP BY C.customer_id 
+0

это для расчета суммы счетов на каждый банк или суммы остатков на каждый банк? – crazyTechie

+0

Это будет рассчитать сумму всех открытых счетов, которые есть у клиента. Если вы хотите, чтобы СУММ все остатки, что БАНК, на самом деле гораздо проще: SELECT имя_банка, SUM (баланс) AS 'balance' FROM Account GROUP BY имя_банка, account_num. – PSGuy

Смежные вопросы