Oracle选择具有多列条件的记录

时间:2016-10-05 10:06:23

标签: sql oracle select

在这里,我想为事件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

刚补充一个条件。请

3 个答案:

答案 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