Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL-返回第二个字段中具有基于多个值的值的行_Sql_Oracle - Fatal编程技术网

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

Oracle SQL-返回第二个字段中具有基于多个值的值的行,sql,oracle,Sql,Oracle,我需要返回包含员工姓名(在一个字段中)的行,这些员工姓名仅分类为经理(不是工人,也不是经理和工人) 经理和工人的价值观在第二个字段中 所以它可能看起来像这样: +----------+------------+ | 'Miller' | 'Manager' | | 'Jones' | 'Manager' | | 'Jones' | 'Worker' | +----------+------------+ 在本例中,我只希望它返回'Miller' 我可以得到一个或两个,但不是一个员工

我需要返回包含员工姓名(在一个字段中)的行,这些员工姓名仅分类为经理(不是工人,也不是经理和工人)

经理和工人的价值观在第二个字段中

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

+----------+------------+
| 'Miller' |  'Manager' |
| 'Jones'  |  'Manager' |
| 'Jones'  |  'Worker'  |
+----------+------------+
在本例中,我只希望它返回
'Miller'

我可以得到一个或两个,但不是一个员工被归类为经理


有什么想法吗?

一种方法使用聚合:

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

一种方法使用聚合:

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

方法的子查询,该子查询在表中不仅有“Managers”和“worker”时应能正常工作:

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

方法的子查询,该子查询在表中不仅有“Managers”和“worker”时应能正常工作:

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

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

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;

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

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;

我删除了表别名前的“AS”,这在Oracle中是不允许的。只有列别名前面可以加“AS”。我删除了表别名前面的“AS”,这在Oracle中是不允许的。只有列别名前面可以加“AS”。