You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server如何查询Type=1且无Status=1记录的唯一AccountId

问题原因

你的原查询逻辑方向完全错误:子查询先过滤出了所有Type=1且Status=1的记录,也就是说子查询的结果集里只有存在Status=1记录的AccountId,且每条记录的RowNumber最小值为1。你在外层查询过滤RowNumber is null or RowNumber <=0的条件,在子查询结果集里不可能有匹配项,最终结果自然为空。

解决方案

方案1:使用NOT EXISTS(推荐,性能最优、逻辑直观)

SELECT DISTINCT AccountId, Type, Status
FROM TempData1 t1
WHERE t1.Type = 1
AND NOT EXISTS (
    SELECT 1
    FROM TempData1 t2
    WHERE t2.AccountId = t1.AccountId
      AND t2.Type = 1
      AND t2.Status = 1
)

说明:外层查询筛选所有Type=1的记录,子查询校验对应AccountId下是否存在Type=1且Status=1的记录,不存在的记录会被保留,DISTINCT用来保证AccountId唯一。

方案2:使用分组聚合实现

SELECT AccountId, MAX(Type) AS Type, MAX(Status) AS Status
FROM TempData1
WHERE Type = 1
GROUP BY AccountId
HAVING MAX(CASE WHEN Status = 1 THEN 1 ELSE 0 END) = 0

说明:按AccountId分组,CASE判断分组内是否存在Status=1的记录,存在则返回1,不存在返回0,HAVING过滤掉存在Status=1记录的分组,得到你要的结果。

内容的提问来源于stack exchange,提问作者ariefs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:21:01