2017-05-22 30 views
0

我在SQL中有点新手,并且正在用看似简单的任务挣扎。 让我们来看看这些数据:在不同级别上聚合一个表格两次

FirstName LastName  ID   DepartmentNumber ManagerID 
Aliana Abramova  1111111111 4     4610226861 
Boriana Borova  2222222222 4     4610226861 
Cali  Moldovanska 3333333333 4     4610226861 
Anelia Simeonova 4009016246 1     4009016246 
Maria  Tacheva  4206174562 3     4206174562 

这是一个雇员表。我想要做的是提取这些作为经理的员工(ID = ManagerID),但只有这些员工在拥有多名员工的部门中工作(因此,只有这些员工具有按DepartmentNumber> 0)

我可以单独做这个任务:

Select FirstName, LastName, ID 
from Employee 
where ID = ManagerID; 

Select count(ID) 
from Employee 
group by DepartmentNumber; 

这对我来说很难了,所以我知道这是这些ID属于以某种方式合并这些知识转化为一个查询和组合数据既是经理又是部门工作的员工超过1人。

我已经完成了类似的任务,但是当涉及到合并1-2-3表分组在不同的级别(并通过不同的键合并)我得到某种困惑。可能我需要做一个临时选择声明,但现在确定如何。

回答

1

您可以使用EXISTS

SELECT * 
FROM dbo.YourTable A 
WHERE EXISTS(SELECT 1 FROM dbo.YourTable 
      WHERE DepartmentNumber = A.DepartmentNumber 
      GROUP BY DepartmentNumber 
      HAVING COUNT(*) > 1) 
AND ID = ManagerID; 
+0

嘿,伟大的 - 我相信它的作品!非常感谢。如何解释存在声明中的Select 1(什么是1代表)? – Bullzeye

+0

我相信只是从结果集中选择第一列 – Vnge

+1

@Bullzeye它不是选择第一列,只是字面值“1”。它可以是'SELECT *','SELECT somecolumn','SELECT NULL'等。它只是检查行的存在,并且我使用'SELECT 1'显式地显示我不需要该子查询中的任何列 – Lamak

相关问题