从第三个表

时间:2017-06-19 16:23:19

标签: sql

我有三张表似乎

1.Table Branch BranchID = FK 命名地址联系

2.Table Staff Staff_ID = FK 命名 地址 性别 接触 Supervisor_ID =如果没有主管,则为NULL 的 BranchID

3.Table Manager Staff_ID = FK 命名 地址 性别 联系 BranchID

我想制作一份清单,显示每个分行的员工分布情况。包括每个分支的分支机构编号,经理名称,主管总数以及男性和女性员工总数。

如何使用sql语句检索上述结果集?

以下是我的查询

选择Manager.Name,Branch.BranchNum,count(Supervisor_ID为空,然后是1,否则为null),作为NumberofSupervisor,count(当Staff.gender ='男性'以及Supervisor_ID不为空时的情况) 1 else null end)作为Male,count(当Staff.gender =' Female'以及Supervisor_ID不为null然后1 else null结束时的情况)作为来自Branch.BranchNum = Manager.BranchNum join的Branch join Manager的女性Branch.BranchNum = Staff.BranchNum group by Branch.BranchNum

我收到此错误列' Manager.Name'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

你能指导我吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

这是一个非常好的自我加入教程。希望这会帮助你。 http://csharp-video-tutorials.blogspot.com/2012/08/self-join-in-sql-server-part-14.html

enter image description here

编写一个给出以下结果的查询。

enter image description here

自我加入查询: 经理也是一名雇员。 EMPLOYEE和MANAGER行都存在于同一个表中。在这里,我们使用不同的别名来加入tblEmployee,其中E代表Employee,M代表Manager。我们使用LEFT JOIN来获取ManagerId为NULL的行。您可以在输出中看到TODD的记录也被检索,但MANAGER为NULL。如果用INNER JOIN替换LEFT JOIN,则不会获得TODD的记录。 选择E.Name作为Employee,M.Name作为Manager 来自tblEmployee E. 左加入tblEmployee M. 在E.ManagerId = M.EmployeeId

简而言之,将表连接到自身称为SELF JOIN。 SELF JOIN不是另一种类型的JOIN。它可以归类为任何类型的JOIN - INNER,OUTER或CROSS Joins。以上查询是LEFT OUTER SELF Join。

内部自我加入tblEmployee表: 选择E.Name作为Employee,M.Name作为Manager 来自tblEmployee E. 内部加入tblEmployee M. 在E.ManagerId = M.EmployeeId

Cross Self Join tblEmployee表: 选择E.Name作为Employee,M.Name作为Manager 来自tblEmployee 交叉加入tblEmployee