Oracle SQL排除特定类型的多行选择精确的两行

时间:2016-07-21 05:11:30

标签: sql oracle conditional-aggregation

我正在尝试编写oracle sql来从表ABC中选择所有emplids 排除具有三个特定角色的emplids。例子如下 -

表1 = ABC

EMPLID角色
______________________
111 苹果
111 芒果
111 Red_Apple
222 苹果
222 橙色
222 Red_Mango
222 香蕉
333 苹果
333 橙色
444 苹果
444 芒果
444 Red_Mango
555 葡萄
666 橙色
666 葡萄
666 蓝莓

表2 =细节

EMPLID NAME EMAIL
__________________________________
111约翰 info@email.com
222埃里卡 info@email.com
等等....
基本上,在上面的例子中,Apple,Mango和Red%是三个角色 需要排除。 sql应该返回EMPLID和NAME 222,333,555和666.它应排除111和444

我尝试创建子选择,但仍然没有工作.enter code here here。任何建议或帮助 非常感谢。

1 个答案:

答案 0 :(得分:0)

使用条件聚合:

SELECT t1.EMPLID,
       t1.NAME,
       t1.EMAIL
FROM DETAILS t1
INNER JOIN
(
    SELECT EMPLID
    FROM ABC
    GROUP BY EMPLID
    HAVING SUM(CASE WHEN ROLE = 'Apple' OR ROLE = 'Mango' OR ROLE LIKE 'Red%'
                    THEN 1 ELSE 0 END) < 3
) t2
    ON t1.EMPLID = t2.EMPLID