如何使用复合键制作过滤器
How to make a filter with composite key
我想创建一个过滤器,它检查所有部门状态是否 =Y 然后 return 该记录的 emp_code 所有部门平均过滤器检查值从 1-4 并且还匹配状态=Y
dept_id和emp_code是复合键
我进行了此查询,但 return 没有得到想要的结果
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 它不会出现在输出中。
似乎您想要一个简单的 select,其中状态为 = '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) ;
我相信这就是你想要的...
SELECT emp_code
FROM fsc_sts_dpt
GROUP BY emp_code
HAVING count(*) = count (CASE WHEN status='Y' THEN 1 ELSE NULL END)
check if all department status =Y then return the emp_code of that record all department mean filter check value from 1-4 and also match the status=Y
首先,这将只找到所有条目的 status
为 'Y'
的那些 emp_code
(不管 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
如果您只想检查所有 dept_id IN (1,2,3,4)
的 status
是否为 'Y'
,那么您可以将其简化为:
SELECT emp_code
FROM fsc_sts_dpt
WHERE dept_id IN ( 1, 2, 3, 4 )
GROUP BY emp_code
HAVING COUNT( CASE WHEN status = 'Y' THEN NULL ELSE 1 END ) = 0
尝试
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'
.
我想创建一个过滤器,它检查所有部门状态是否 =Y 然后 return 该记录的 emp_code 所有部门平均过滤器检查值从 1-4 并且还匹配状态=Y
dept_id和emp_code是复合键
我进行了此查询,但 return 没有得到想要的结果
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 它不会出现在输出中。
似乎您想要一个简单的 select,其中状态为 = '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) ;
我相信这就是你想要的...
SELECT emp_code
FROM fsc_sts_dpt
GROUP BY emp_code
HAVING count(*) = count (CASE WHEN status='Y' THEN 1 ELSE NULL END)
check if all department status =Y then return the emp_code of that record all department mean filter check value from 1-4 and also match the status=Y
首先,这将只找到所有条目的 status
为 'Y'
的那些 emp_code
(不管 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
如果您只想检查所有 dept_id IN (1,2,3,4)
的 status
是否为 'Y'
,那么您可以将其简化为:
SELECT emp_code
FROM fsc_sts_dpt
WHERE dept_id IN ( 1, 2, 3, 4 )
GROUP BY emp_code
HAVING COUNT( CASE WHEN status = 'Y' THEN NULL ELSE 1 END ) = 0
尝试
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'
.