我需要找到属于特定条件的任何组的所有行。
我将一个组定义为在“组”列中共享一个值的几行。 相关组必须包含至少一行且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。
再添加一个条件,该条件将检查该组是否至少有一个合格的= 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 )