在这里,我要选择事件37和49的date均为null的enames,以及这两个事件(37,49)未链接的名称。如果任何事件的date不为空,则不应选择该ename。在本例中,它应该只获取C1、D1、E1 ename。D1和E1,因为没有链接到第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只是多加了一个条件。请
发布于 2016-10-05 18:40:47
对相关行进行计数。如果只需要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)
;发布于 2016-10-06 02:17:10
假设您的数据不包含重复行,则更改查询:
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); 发布于 2016-10-08 02:37:53
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,它将被忽略;如果未定义,则默认情况下,ELSE为NULL。
https://stackoverflow.com/questions/39871099
复制相似问题