SQL按ID聚合查询:实现含'T'则返回'T'的单行输出逻辑
解决方案:按ID聚合并优先返回'T'
原数据表
id, in_use 1, T 1, F 2, T 2, T 3, F
需求逻辑
同一ID下,只要存在in_use = 'T',最终结果就返回'T';仅当该ID所有行的in_use都是'F'时,才返回'F'。
方法一:利用MAX()聚合函数(最简洁)
因为字符'T'的ASCII码值大于'F',对每个ID取in_use的最大值,就能直接满足需求,同时通过GROUP BY id实现多行合并:
SELECT id, MAX(in_use) AS in_use FROM your_table_name GROUP BY id;
方法二:用CASE WHEN显式判断(更直观)
如果想更清晰地表达逻辑,可以用EXISTS子查询判断当前ID是否存在'T':
SELECT DISTINCT id, CASE WHEN EXISTS (SELECT 1 FROM your_table_name t2 WHERE t2.id = t1.id AND t2.in_use = 'T') THEN 'T' ELSE 'F' END AS in_use FROM your_table_name t1;
执行结果
id, in_use 1, T 2, T 3, F
内容的提问来源于stack exchange,提问作者user9465104
相关产品推荐
相关产品推荐

