Oracle SQL - возвращает строки со значением, основанным на нескольких значениях во втором поле - PullRequest
0 голосов
/ 28 октября 2018

Мне нужно вернуть строки, содержащие имена сотрудников (в одном поле), которые классифицируются только как менеджеры (не как работники или как менеджеры и работники).

Значения Managers и Workers находятся во втором поле.

Так что это может выглядеть так:

+----------+------------+
| 'Miller' |  'Manager' |
| 'Jones'  |  'Manager' |
| 'Jones'  |  'Worker'  |
+----------+------------+

В этом случае я просто хочу, чтобы он возвратил 'Miller'.

Я могу получить одно или оба, но не те, в которых сотрудник классифицирован только как менеджер.

Есть мысли?

Ответы [ 3 ]

0 голосов
/ 28 октября 2018

Метод с подзапросом, который должен хорошо работать, когда в таблице есть не только «Менеджеры» и «Рабочие»:

SELECT t1.name FROM t t1
WHERE
    t1.classification='Manager'
    AND NOT EXISTS (
        SELECT 1 FROM t t2 WHERE t1.name=t2.name AND t2.classification='Worker'
    )
0 голосов
/ 28 октября 2018

Подсчитайте количество названий.Если у них есть заголовок «Менеджер» и есть только один заголовок, выберите отдельное лицо:

SELECT *
  FROM PEOPLE p
  INNER JOIN (SELECT NAME, COUNT(TITLE) AS TITLE_COUNT
                FROM PEOPLE
                GROUP BY NAME) c
    ON c.NAME = p.NAME
  WHERE p.TITLE = 'Manager' AND
        c.TITLE_COUNT = 1;

dbfiddle здесь

0 голосов
/ 28 октября 2018

Один метод использует агрегацию:

select name
from t
group by name
having min(classification) = max(classification) and min(classification) = 'manager';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...