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”。