公司数据库中的客户和分支查询

时间:2015-04-25 18:50:51

标签: mysql sql database

我的数据库中有以下四个表:

EMPLOYEE

PK: employeeID;     
FK: empBranch references BRANCH;
FK: empSupervisor references EMPLOYEE

enter image description here

BRANCH

PK: branchNumber
FK: branchManager references EMPLOYEE

enter image description here

CUSTOMER

PK: customerID

enter image description here

订单

PK: orderNumber
FK: customerID references CUSTOMER; 
FK: salesPerson references EMPLOYEE

enter image description here

现在我需要列出这两件事:

  1. 仅销售给与销售人员分支所在城市位于同一城市的客户的员工ID和销售人员姓名。

  2. 已销售给与销售人员分支所在城市位于同一城市的每位客户的员工ID和销售人员姓名。

  3. 请帮我回答两个问题

2 个答案:

答案 0 :(得分:1)

仅销售给与销售人员分支所在城市位于同一城市的客户的Employee_ID和销售人员姓名。

SELECT DISTINCT
  e.employeeid,
  e.emplname || e.empfname AS salesperson_name
FROM
  orders o
  INNER JOIN customer c ON o.customerid = c.customerid
  INNER JOIN branch b ON o.salesperson = b.branchmanager
  INNER JOIN employee e ON o.salesperson = e.employeeid
WHERE 
  c.custcity = b.branchcity -- salesperson's branch located in the same city as customer

答案 1 :(得分:1)

由于您没有指定特定的RDBMS,因此这是为SQL Server编写的。

  1. 仅销售给与销售人员分支所在城市位于同一城市的客户的Employee_ID和销售人员姓名。

    null
  2. 已销售给与销售人员分支所在城市位于同一城市的每位客户的员工ID和销售人员姓名。

  3. 有多种方法可以获得每个城市的计数,但我使用了CTE。

    SELECT 
        e.EmployeeID,
        e.Empfname + ' ' + e.Emplname Name
    
    FROM Orders o
    JOIN customer c 
        ON o.CustomerID = c.CustomerId
    JOIN Employee e 
        ON o.SalesPerson = e.Employeeid
    JOIN Branch b
        ON e.EMPBRANCH = b.BranchManager
    GROUP BY e.Employeeid, e.EMPFNAME + ' ' + e.EMPLNAME
    HAVING COUNT(CASE WHEN c.custCity <> b.BranchCity THEN 1 END) = 0 -- no sales outside of the employee's city