2010-01-01 2 views
-1

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

  1. Список филиалов вместе с количеством сотрудников и назначенных им клиентов, общая сумма кредита, общий остаток на счете, активы для филиалов, проживающих в данном городе.
  2. Список клиентов, которые сделали счета и кредитные операции в данный период времени
  3. сотрудников Список и количество обслуживаемых каждым из них клиентов в данный период времени

Я думаю, простой пример будет достаточно для меня решить покой.

Вот что я пытался до сих пор для первого:

ALTER PROCEDURE [dbo].[SelecBranchesByCity] 
    (@City varchar(50)) 
AS 
    select 
     Br.Name as BranchName, 
     COUNT(emps.ID) as NumberOfEmployee, 
     SUM(emps.NumberOfCustomers) as TotalCustomers, 
     SUM(lo.Amount) as TotalAmountOfLoan, 
     SUM(acc.Balance) as TotalBalance, 
     Br.Assets as Assets 
    from Branches Br 
    left outer join Employees emps on emps.[BranchName] = Br.Name 
    left outer join Loans lo on lo.[BranchName] = Br.Name 
    left outer join Accounts acc on acc.[BranchName] = Br.Name 
    where 
     Br.[Address] like '%'[email protected]+'%' 
    GROUP BY 
     Br.ID, 
     Br.Name, 
     Br.Assets 

Вот схема! alt text http://img99.imageshack.us/img99/5967/schemaq.jpg

+0

пожалуйста, покажите, что вы пробовали :) –

+0

Хорошо, вот что я пытаюсь для первого ALTER PROCEDURE [DBO]. [SelecBranchesByCity] @City VARCHAR (50) кАК НАЧАТЬ выберите Br.Name как BranchName, COUNT (emps.ID), как NumberOfEmployee, СУММЫ (emps.NumberOfCustomers) в качестве TotalCustomers, СУММЫ (lo.Amount) в качестве TotalAmountOfLoan, СУММЫ (acc.Balance) в качестве TotalBalance, Br.Assets как активы из ветвей Br левых наружных [BranchName] = Br.Name left external join Loans lo on lo. [BranchName] = Br.Name left external join Аккаунты acc on acc. [BranchName] = Br.Name , где Br. [Адрес], например, «%» + @ City + «%» GROUP BY Br.ID, Br.Name, Br.Assets – Kubi

+0

Для чего стоит '' '' '' '' '' '' '' '' '' '' '' '' 'ID' в таблице, так как клиенты могут иметь более одного кредитного счета. Кроме того, у вас уже есть связь между «Клиентами» и «Ссудами» в вашей таблице «LoanCustomer». – Juliet

ответ

2

Схема пугающая. Многие-ко-многим по кредитам клиентов? Многие-ко-многим на счетах клиентов? Зачем?? Сотрудники имеют столбец branchname вместо отношения FK к branches. loan_operations имеет FK до employees!? Я не хочу отклоняться от темы или звучать легкомысленно, но здесь так много анти-шаблонов, я даже не знаю, с чего начать. Но я все равно попытаюсь помочь с конкретным вопросом.

Q1:

CREATE PROCEDURE GetBranchSummaryByCity 
    @City varchar(50) 
AS 
SELECT 
    b.id, b.address, b.name, b.assets, 
    b2.EmployeeCount, b2.CustomerCount, 
    b2.TotalLoanAmount, b2.TotalAccountBalance 
FROM branches b 
INNER JOIN 
(
    SELECT 
     b.id, 
     ISNULL(COUNT(DISTINCT e.id), 0) AS EmployeeCount, 
     ISNULL(COUNT(c.id), 0) AS CustomerCount, 
     ISNULL(SUM(l.amount), 0) AS TotalLoanAmount, 
     ISNULL(SUM(a.balance), 0) AS TotalAccountBalance 
    FROM branches b 
    LEFT JOIN employees e 
     -- Fix your schema so this matches the branch ID instead! 
     ON e.branchname = b.name 
    LEFT JOIN employee_customer ec 
     ON ec.employeeid = e.id 
    LEFT JOIN customers c 
     ON c.id = ec.customerid 
    LEFT JOIN customer_accounts ca 
     ON ca.customerid = c.id 
    LEFT JOIN accounts a 
     ON a.id = ca.accountid 
    LEFT JOIN loan_customer lc 
     ON lc.customerid = c.id 
    LEFT JOIN loans l 
     ON l.id = lc.loanid 
    WHERE b.Name LIKE '%' + @City + '%' 
    GROUP BY b.id 
) b2 
ON b2.id = b.id 

Замечу, что у вас есть amount столбец как loans и loan_operations. Трудно понять, какая разница между этими двумя - вполне возможно, что loans не должен иметь этот столбец вообще, и вместо этого он должен быть суммирован из столбца в loan_operations.

Q2:

CREATE PROCEDURE FindCustomersWithLoansByDateRange 
    @BeginDate datetime, 
    @EndDate datetime 
AS 
SELECT c2.id, c2.name, c2.address, ... 
FROM 
(
    SELECT DISTINCT c.id 
    FROM customers c 
    INNER JOIN loan_customer lc 
     ON lc.customerid = c.id 
    INNER JOIN loans l 
     ON l.id = lc.loanid 
    INNER JOIN loan_operations lo 
     ON lo.loanid = l.id 
    WHERE lo.date BETWEEN @BeginDate AND @EndDate 
) c1 
INNER JOIN customers c2 
ON c2.id = c1.id 

Q3:

CREATE PROCEDURE GetEmployeeServiceSummaryByDateRange 
    @BeginDate datetime, 
    @EndDate datetime 
AS 
SELECT e.id, ISNULL(es.CustomerCount, 0) AS CustomerCount, e.name, e.position, ... 
FROM employees e 
LEFT JOIN 
(
    SELECT e.id, COUNT(DISTINCT c.id) AS CustomerCount 
    FROM employees e 
    INNER JOIN employee_customer ec 
     ON ec.employeeid = e.id 
    INNER JOIN customers c 
     ON c.id = ec.customerid 
    INNER JOIN loan_customer lc 
     ON lc.customerid = c.id 
    INNER JOIN loans l 
     ON l.id = lc.loanid 
    INNER JOIN loan_operations lo 
     ON lo.loanid = l.id 
    WHERE lo.date BETWEEN @BeginDate AND @EndDate 
    GROUP BY e.id 
) es 
ON es.id = e.id 
+0

эй Аарон Спасибо! Да, схема такова. Но я также программирую интерфейс, и я не хочу так много общаться с FK :) Я хочу сделать мин. reqs :) Спасибо миллион снова! – Kubi

+0

btw да многим многим для клиентов и займов, так как задание так хочется :) – Kubi

+0

ok У меня есть проблемы с первым! Прежде всего http://cmpe.emu.edu.tr/chefranov/Cmpe354-09Fall/Notes/CMPE%20354%20Fall%202009%20Term%20Project%20Task%20with%20grading%20policy.doc вот назначение. и из первого запроса он всегда возвращает 0 для totalloanamount и totalaccountbalance? – Kubi

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