我试图从联系人表中选择某些客户,如果他们没有列出监护人。
ClientId | ContactId | Guardian 123 | 1 | Y 123 | 2 | N 123 | 3 | N 456 | 4 | N 456 | 5 | N 456 | 6 | N
所需的输出:
ClientId | ContactId | Guardian 456 | 4 | N 456 | 5 | N 456 | 6 | N
因此,我的目标是客户端456会显示在我的查询结果中,而 不是 客户端123。我编写了以下内容:
select * from Contacts where Guardian <> (case when Guardian = 'Y' then Guardian else '' end)
我也试过了
select * from Contacts c where not exists (select 1 from Contacts c2 where c2.ContactId = c.ContactId and c.Guardian = 'Y')
但是我的结果只是排除了Guardian = Y的行,并打印Guardian = N的行,即使存在与Guardian = Y的ClientId相关联的任何行,该ClientId也不应出现在结果中。我一直在寻找如何仅选择其中具有某些值的行,但是我没有运气找到如何完全排除ClientId(如果其中一行匹配)。
如果有任何建议,我将不胜感激!
子查询获取ClientId没有任何的Guardian = 'Y'。如果您需要完整的记录,也可以使用外部查询。如果仅需要ID,则仅使用子查询
ClientId
Guardian = 'Y'
select * from Contacts where ClientId in ( select ClientId from Contacts group by ClientId having sum(case when Guardian = 'Y' then 1 else 0 end) = 0 )