Oracle SQL-返回行的值基于第二个字段中的多个值

时间:2018-10-28 15:55:32

标签: sql oracle

我需要返回包含雇员名称(在一个字段中)的行,这些雇员名称仅被归为“经理” (而不是“工人”或“经理和工人”)。

经理和工人值在第二个字段中。

所以它可能看起来像这样:

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

在这种情况下,我只希望它返回'Miller'

我可以得到一个或两个,但不能得到仅将雇员归为经理的人。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

一种方法使用聚合:

select name
from t
group by name
having min(classification) = max(classification) and min(classification) = 'manager';

答案 1 :(得分:0)

带有子查询的方法在表中不仅有“经理”和“工人”的情况下应能很好地工作:

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'
    )

答案 2 :(得分:0)

计算标题数。如果他们的头衔是“经理”并且只有一个头衔,请选择个人:

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 here