Где пункт, где - версия 2 :-) - PullRequest
1 голос
/ 10 марта 2010

Мне нужно сделать это:

Существует таблица с именем table1, в которой есть столбец идентификатора сотрудника, столбец состояния, в котором есть только значения 1 и 0, и столбец отдела со значениями 100, 101, 102.

Я хочу перечислить всех сотрудников со статусом = 0

из приведенного выше списка, я хочу отфильтровать сотрудников, которые имеют (отдел = 100 и чей статус = 1)

Расширенный вопрос:

Я хочу включить только чей отдел 100 и статус = 1 из списка статуса = 0 сотрудников

Пожалуйста, помогите мне

Ответы [ 5 ]

1 голос
/ 10 марта 2010

Я предполагаю, что вы пропустили важную часть постановки задачи: каждый идентификатор сотрудника может быть в таблице1 более одного раза. Я предполагаю, что вы хотите, чтобы сотрудники имели одну запись с указанием статуса 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

Если я правильно понимаю ваш вопрос, это должно соответствовать вашему желанию.

0 голосов
/ 10 марта 2010

Наверное, как-то так, если я вас правильно понимаю.

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 )
0 голосов
/ 10 марта 2010

Если у вас есть несколько строк с одним и тем же 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
0 голосов
/ 10 марта 2010

Это не имеет смысла ... вы хотите отфильтровать всех сотрудников, чей статус равен 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. Ну, как вы можете найти тот, который имеет статус 1, когда вы фильтровали для статуса 0 ????

Вы, вероятно, хотите условие ИЛИ:

SELECT blah FROM myTable WHERE EmpStatus=0 OR (EmpStatus=1 AND Dept=100)

Что, очевидно, другой вопрос ...

0 голосов
/ 10 марта 2010

Я предполагаю, что вы неправильно сформулировали это и хотите ИЛИ вместо 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...