Azure SQL按NOTRID返回指定结果的SQL查询优化需求
SQL Azure 查询优化方案
需求明确
- 针对每个
NOTRID返回对应记录,规则如下:- 若该
NOTRID的QualitativeResult字段全为空字符串,仅返回该NOTRID的1条记录 - 若该
NOTRID的QualitativeResult字段存在空值与非空值混合,仅返回非空值的记录
- 若该
- 所有
NOTRID至少包含1条空值记录
优化后的查询语句
通过窗口函数先统计每个NOTRID下非空QualitativeResult的数量,再基于统计结果筛选记录:
WITH NotrStats AS ( SELECT NOTRID, COUNT(CASE WHEN QualitativeResult <> '' THEN 1 END) OVER (PARTITION BY NOTRID) AS NonEmptyCount FROM -- 替换为你实际的表/视图关联逻辑,比如 Results JOIN NotrResult JOIN vNOTR YourTableOrJoinLogic ) SELECT DISTINCT t.NOTRID, t.QualitativeResult -- 添加你需要返回的其他字段 FROM YourTableOrJoinLogic t JOIN NotrStats s ON t.NOTRID = s.NOTRID WHERE (s.NonEmptyCount > 0 AND t.QualitativeResult <> '') OR (s.NonEmptyCount = 0 AND t.QualitativeResult = '') ORDER BY t.NOTRID;
逻辑说明
- 统计阶段:用
COUNT(CASE...) OVER(PARTITION BY NOTRID)计算每个NOTRID下非空QualitativeResult的总数,以此判断该NOTRID属于哪种情况 - 筛选阶段:
- 当
NonEmptyCount>0时,说明存在有效非空记录,只保留QualitativeResult<>''的行 - 当
NonEmptyCount=0时,说明全为空字符串,通过DISTINCT确保每个NOTRID仅返回1条空值记录
- 当
- 替换
YourTableOrJoinLogic为你现有查询中的表连接逻辑即可直接使用
内容的提问来源于stack exchange,提问作者Sam Baker
相关产品推荐
相关产品推荐

