如何使用复合键制作过滤器

时间:2016-01-07 09:26:35

标签: oracle10g

我想制作一个过滤器,在其中检查所有部门状态是否为Y然后返回该记录的emp_code所有部门均值过滤器检查值1-4并且还匹配状态= Y

dept_id和emp_code是复合键

enter image description here

我进行此查询但不返回欲望结果

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它将不会出现在输出中。

4 个答案:

答案 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_idemp_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) ;