Where子句在哪里 - 版本2 :-)

时间:2010-03-10 17:48:02

标签: sql sql-server sql-server-2005

我需要这样做:

有一个名为table1的表,它有一个employee id列,status列只有值1和0,department列有值100,101,102。

我想列出状态= 0

的所有employeeid

从上面的列表中我想过滤具有(部门= 100且其状态= 1)的员工

扩展问题:

我想在status = 0员工列表

中仅包含其部门为100且状态= 1的部门

请帮帮我

5 个答案:

答案 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 )