我想搜索所有没有分析师(cod_role_acces
(的公司(niu_lds
(。
示例:假设有一家X公司有3名员工。其中一位是分析师。我不希望那家公司出现在我的业绩中。但是如果存在具有2名员工的Y公司并且他们中没有一个是"公司";分析员";,那么我希望这家公司能拿出结果。
这是我的问题:
SELECT DISTINCT
a.name_pers as "First Name",
a.last_pers as "Last Name",
a.id as "# account",
a.cod_role_acces as "Profile",
a.niu_lds as "Company",
b.cod_missn as "Mission",
FROM sr.c_r_v_obt_cp_util a inner join ods.c_od_missn_ld b on a.niu_lds = b.niu_lds
WHERE a.cod_eta_util in ('VER', 'APPR')
and a.id_cod_sr_alim = '2'
and b.cod_missn = 'PHA'
and not exists (select null
from sr.c_r_v_obt_cp_util c
where c.niu_lds = a.niu_lds
and a.cod_role_acces = 'ANALYST'
);
我的问题是它正在把我退回"公司";已经";分析员";!我想看看所有没有属于该公司的"ANALYST"(cod_role_access(的公司(niu_lds(。
我已经问了这个问题,有人帮了我很多,但我仍然没有得到预期的结果。
我的第一个问题:SQL查询来检查一个值是否为';不存在
谢谢
我相信罗密欧将null改为1的答案可能会让你达到目的。
如果没有,并且你想直观地看到发生了什么来进行比较,你可以把不存在的函数变成左联接,这样你就可以看到值的位置。
使用上一篇文章中的测试示例
with test (company, ename, profile) as
(select 'BMW', 'Scott', 'Analyst' union all
select 'BMW', 'King' , 'Manager' union all
select 'BMW', 'Mike' , 'Clerk' union all
select 'SAP', 'John' , 'Clerk' union all
select 'SAP', 'Fred' , 'Manager'
)
select a.company, a.ename, a.profile, b.analyst
from test a
left join (select 1 as analyst, company
from test
where profile = 'Analyst') b
on b.company = a.company
以下是返回-
COMPANY | ENAME | 档案分析 |
---|---|---|
宝马 | Scott | 分析师1 |
宝马 | King | |
宝马 | Mike | |
SAPSAP经理 |