首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle选择多列条件记录

Oracle选择多列条件记录
EN

Stack Overflow用户
提问于 2016-10-05 18:06:23
回答 3查看 78关注 0票数 0

在这里,我要选择事件37和49的date均为null的enames,以及这两个事件(37,49)未链接的名称。如果任何事件的date不为空,则不应选择该ename。在本例中,它应该只获取C1、D1、E1 ename。D1和E1,因为没有链接到第37和49号事件

有谁能帮我解决这个问题吗。

代码语言:javascript
复制
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

只是多加了一个条件。请

EN

回答 3

Stack Overflow用户

发布于 2016-10-05 18:40:47

对相关行进行计数。如果只需要ename

代码语言:javascript
复制
select ename
from mytable
where event in (37,49) and date is null
group by ename
having count(*) = 2

编辑

下面是一组新的条件

代码语言:javascript
复制
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)
    ;
票数 2
EN

Stack Overflow用户

发布于 2016-10-06 02:17:10

假设您的数据不包含重复行,则更改查询:

代码语言:javascript
复制
 SELECT * 
 FROM   table_name 
 WHERE  event IN ( 37, 49 ) 
   AND ename NOT IN(SELECT DISTINCT( ename ) 
                    FROM   table_name 
                    WHERE  date IS NOT NULL)

 UNION
 SELECT * 
 FROM   table_name 
 WHERE  event NOT IN ( 37, 49 ) 
   AND ename NOT IN(SELECT DISTINCT( ename ) 
                    FROM   table_name 
                    WHERE  date IS NOT NULL);  
票数 0
EN

Stack Overflow用户

发布于 2016-10-08 02:37:53

代码语言:javascript
复制
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是一个很好的方法,但您也可以使用conditional aggregation来做到这一点,而不需要子查询。在使用诸如COUNT()SUM()之类的聚合公式时,它们会忽略Null值,因此,如果CASE表达式的ELSE部分为NULL,它将被忽略;如果未定义,则默认情况下,ELSENULL

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39871099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档