SQL Server分组查询需求:多Alpha值显示NO MATCH,匹配则显示对应值
问题描述
需要编写SQL Server查询,按name分组处理Alpha字段:
- 同一
name下存在多个不同的Alpha值时,显示'NO MATCH' - 同一
name下所有Alpha值一致时,显示该Alpha值
当前使用的查询语句:
select name,Alpha from T where name = 'John' GROUP BY name, Alpha
该查询返回结果:
name Alpha John 4 John 7 John 20
希望将上述结果改为显示John | NO MATCH,请问如何修改查询?
解决方案
可以通过统计分组内不同Alpha值的数量,结合CASE语句实现需求:
SELECT name, CASE WHEN COUNT(DISTINCT Alpha) > 1 THEN 'NO MATCH' ELSE CAST(MAX(Alpha) AS VARCHAR(10)) END AS Alpha_Status FROM T WHERE name = 'John' GROUP BY name;
关键逻辑说明:
COUNT(DISTINCT Alpha):统计当前name分组下不同Alpha值的总数,大于1则说明存在不匹配的记录- 当所有
Alpha值一致时,MAX(Alpha)(或MIN(Alpha))可获取到唯一的Alpha值,通过CAST转换为字符串类型,保证与'NO MATCH'的返回类型统一,避免类型冲突
内容的提问来源于stack exchange,提问作者NBad901
相关产品推荐
相关产品推荐

