在这里,我想为事件37和49选择enames
为空的date
以及这两个事件(37,49)未链接的命名。如果任何事件的date
不为null,则不应选择ename
。在这个例子中,它应该只获取C1,D1,E1 ename。 D1和E1因为没有链接到事件no 37和49
任何人都可以帮我解决这个问题。
id ename event date
1 A1 37 1-Oct-16
2 A1 49 NULL
3 C1 37 NULL
4 C1 49 NULL
5 D1 50 NULL
6 E1 30 NULL
刚补充一个条件。请
答案 0 :(得分:2)
计算相关行。如果只需要ename
select ename
from mytable
where event in (37,49) and date is null
group by ename
having count(*) = 2
编辑
遵循一系列新条件
select distinct ename
from mytable t1
where not exists (
select 1
from mytable t2
where t2.ename = t1.ename and t2.event in (37,49) and t2.date is not NULL)
;
答案 1 :(得分:0)
更改查询,假设您的数据不包含重复的行:
$> arg='1234,1244,1567'
$> echo "\"${arg//,/\",\"}\""
"1234","1244","1567"
答案 2 :(得分:0)
SELECT
ename
FROM
TableName
GROUP BY
ename
HAVING
COUNT(CASE WHEN event IN (37,49) AND date IS NOT NULL THEN 1 END) = 0
@ Serg的答案中的NOT EXISTS
是一个很好的方法,但您也可以使用 条件聚合 来执行此操作而无需子查询。使用COUNT()
或SUM()
等聚合公式时,如果Null
表达式的ELSE
部分为CASE
,则忽略NULL
值将被忽略,默认情况下ELSE
如果未定义则为NULL
。