小编典典

如何检查一组行中的至少一个是否具有特定值

sql

我需要找到属于特定条件的任何组的所有行。

我将一个组定义为在“组”列中共享一个值的几行。 相关组必须包含至少一行且Eligible设置为true的行,并且该组中至少有两行在Group或Eligible之外的任何列中必须彼此不同。

样表

Group    LastName    FirstName   Eligible
==========================================
 1       Smith       John          True
 1       Smith       John          False
 2       Doe         Beth          True
 2       Doe         Jane          False
 2       Doe         Jane          False
 3       Ward        Bill          True
 4       Adams       Sally         True
 4       Grimes      Sally         True

所需结果

Group    LastName    FirstName   Eligible
==========================================
 2       Doe         Beth          True
 2       Doe         Jane          False
 2       Doe         Jane          False
 4       Adams       Sally         True
 4       Grimes      Sally         True

以下查询使我接近

SELECT *
FROM ExampleTable
WHERE Group in 
    (SELECT Group
    FROM ExampleTable
    GROUP BY Group
    HAVING count(distinct LastName) > 1 or count(distinct FirstName) > 1)

问题在于它返回的结果太多,因为没有考虑该组中的记录之一是否被标记为合格。

我可能缺少一些简单的东西,但是我无法弄清楚如何检查组中的一条记录是否将Eligible设置为true,而不检查所有记录是否都设置为true。


阅读 162

收藏
2021-04-28

共1个答案

小编典典

再添加一个条件,该条件将检查该组是否至少有一个合格的= True值。

SELECT *
FROM ExampleTable
WHERE Group in 
    (SELECT Group
    FROM ExampleTable
    GROUP BY Group
    HAVING (count(distinct LastName) > 1 or count(distinct FirstName) > 1) 
    and count(case when eligible='True' then 1 end) >= 1
    )
2021-04-28