我需要这样做:
有一个名为table1的表,它有一个employee id列,status列只有值1和0,department列有值100,101,102。
我想列出状态= 0
的所有employeeid从上面的列表中我想过滤具有(部门= 100且其状态= 1)的员工
扩展问题:
我想在status = 0员工列表
中仅包含其部门为100且状态= 1的部门请帮帮我
答案 0 :(得分:1)
我猜你已经遗漏了问题陈述的一个重要部分:每个employeeid可以在table1中不止一次。我假设您希望员工有一个记录指示状态0,第二个记录表示部门100 /状态1。
如果是这样,试试这个:
SELECT * FROM Table1 AS E0
INNER JOIN Table1 AS D100
ON E0.EmployeeID = D100.EmployeeID
WHERE E0.Status = 0 AND D100.Department = 100 AND D100.Status = 1
如果我理解你的问题,这应该接近你想要的。
答案 1 :(得分:0)
我猜你的错误措辞并且想要OR而不是AND,试试这个..
select *
from table1
where (status=0) or (status=1 and department=100)
修改强>
如果您只想要员工,请执行此操作
select employeeid
from table1
where (status=0) or (status=1 and department=100)
编辑2号
覆盖所有基础,如果你想找到所有没有状态为0,状态为1和100的部门的员工,那么试试这个!!
select employeeid
from table1
where not (status=0) and not (status=1 and department=100)
答案 2 :(得分:0)
这没有意义......你想过滤所有状态为0的员工。 一旦你过滤了这些记录,你想重新过滤那个原始过滤器,以包括所有有100部门的员工(这仍然没问题),但是你想要的状态是1.你怎么能在你的原件中说明请求您只希望员工处于0状态???
考虑一下,从一个试图回答你问题的人那里拿走它。 您有10条记录,其中一半的员工的状态为0,另一半的状态为1。
Jon1 1
Jon2 1
Jon3 1
Jon4 1
Jon5 1
JOn6 0
Jon7 0
Jon8 0
Jon9 0
Jon10 0
所以你希望所有员工都为0:
JOn6 0
Jon7 0
Jon8 0
Jon9 0
Jon10 0
足够简单:SELECT blah FROM Employees WHERE Status=0
现在您想要另一个查询,其部门编号为100但状态为1.那么当您筛选状态为0时,如何找到状态为1的查询?
你可能想要OR条件:
SELECT blah FROM myTable WHERE EmpStatus=0 OR (EmpStatus=1 AND Dept=100)
这显然是一个不同的问题......
答案 3 :(得分:0)
如果你有多个具有相同EmployeeID的行(只是在这里猜测),那么你可能想尝试以下查询。
Select EmployeeId
From Table1
Group By EmployeeId
Having Count(Case When Status = 0 Then 1 End) > 0
And Count(Case When Status = 1 And Department = 100 Then 1 End) > 0
答案 4 :(得分:0)
如果我正确理解你,可能就是这样。
SELECT *
FROM emp_dept e1
WHERE status = 0
AND EXISTS( SELECT *
FROM emp_dept e2
WHERE e2.id = e1.id
AND e2.status = 1
AND e2.dept = 100 )