如何查询GROUP BY分组内所有LeadIndication均为FALSE的实例
解决方案
要筛选出分组内所有LeadIndication取值均为FALSE的记录,核心逻辑是验证目标分组内不存在任意一行LeadIndication为TRUE的情况,你可以根据需要返回的结果选择以下两种实现方式:
方式1:仅返回符合条件的分组维度值
如果你只需要获取分组后的AssetID、InvestmentID列表,直接在现有GROUP BY语句后添加HAVING子句做聚合过滤即可:
SELECT [AssetID], [InvestmentID] FROM [rdInvestments] GROUP BY [AssetID],[InvestmentID] -- 分组内没有任何一行LeadIndication为TRUE则符合要求 HAVING MAX(CASE WHEN [LeadIndication] = TRUE THEN 1 ELSE 0 END) = 0
如果你使用的数据库支持布尔值直接做聚合运算,也可以简化写为
HAVING MAX([LeadIndication]) = FALSE,上述CASE WHEN写法兼容所有主流SQL数据库。
方式2:返回符合条件分组的全部明细行
如果你需要获取分组内所有符合要求的完整行数据,先通过子查询筛选合格分组,再关联回原表取明细即可:
SELECT t1.* FROM [rdInvestments] t1 INNER JOIN ( SELECT [AssetID], [InvestmentID] FROM [rdInvestments] GROUP BY [AssetID],[InvestmentID] HAVING MAX(CASE WHEN [LeadIndication] = TRUE THEN 1 ELSE 0 END) = 0 ) t2 ON t1.[AssetID] = t2.[AssetID] AND t1.[InvestmentID] = t2.[InvestmentID]
如果你的实际分组维度是Parent字段,只需要将上述语句中GROUP BY和关联条件对应的字段替换为Parent即可。
内容的提问来源于stack exchange,提问作者chrtak
相关产品推荐
相关产品推荐

