我想制作一个过滤器,在其中检查所有部门状态是否为Y然后返回该记录的emp_code所有部门均值过滤器检查值1-4并且还匹配状态= Y
dept_id和emp_code是复合键
我进行此查询但不返回欲望结果
select distinct(emp_code) from fsc_sts_dpt where dept_id in (1,2,3,4) and status= 'Y'
但是问题是dept_id 1,2其中emp_code = 101010是空的,所以在运算符中也考虑101010但是我想如果任何关于dept_id的状态为null它将不会出现在输出中。
答案 0 :(得分:1)
我相信这就是你想要的......
SELECT emp_code
FROM fsc_sts_dpt
GROUP BY emp_code
HAVING count(*) = count (CASE WHEN status='Y' THEN 1 ELSE NULL END)
答案 1 :(得分:1)
检查所有部门状态是否为Y然后返回该记录的emp_code所有部门均值过滤器检查值1-4并且还匹配状态= Y
首先,只会找到所有条目emp_code
status
'Y'
的{{1}}(无论dept_id
),然后再检查那些emp_code
至少有一个dept_id
,其值为1,2,3,4
。
SELECT emp_code
FROM (
SELECT emp_code,
COUNT( CASE WHEN dept_id IN ( 1, 2, 3, 4 ) THEN 1 END ) AS num_depts
FROM fsc_sts_dpt
GROUP BY emp_code
HAVING COUNT( CASE WHEN status = 'Y' THEN NULL ELSE 1 END ) = 0
)
WHERE num_depts > 0
如果您只想检查所有status
的{{1}}是'Y'
,那么您可以将其简化为:
dept_id IN (1,2,3,4)
答案 2 :(得分:1)
尝试
select emp_code
from fsc_sts_dpt
where status = 'Y'
and dept_id in (1, 2, 3, 4)
group by emp_code
having count(*) = 4
作为dept_id and emp_code is composite key
,不会出现两次相同的dept_id
和emp_code
,因此计数4
表示dept_id in (1, 2, 3, 4)
和status = 'Y'
。
答案 3 :(得分:0)
似乎你想要一个简单的选择状态是''Y'
select distinct(emp_code) from fsc_sts_dpt where ifnull(status,'N') ='Y' ;
或
上次发表评论
select distinct(emp_code) from fsc_sts_dpt
where dept_if not in (select distinct dept_id from
fsc_sts_dpt is null) ;