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

TSQL:如何筛选从未出现指定状态(Transferred)的ID?

查找从未出现指定状态的ID(TSQL实现)

嘿,我来给你几个实用的TSQL查询方案,都能帮你找出从未出现过Transferred状态的ID:

方法1:使用NOT EXISTS(最直观的写法)

这种方法逻辑清晰,通过子查询排除那些存在Transferred记录的ID:

SELECT DISTINCT ID
FROM YourTableName t1
WHERE NOT EXISTS (
    SELECT 1
    FROM YourTableName t2
    WHERE t2.ID = t1.ID
      AND t2.Status = 'Transferred'
);

解释:先获取表中所有唯一的ID,然后筛选出不存在对应Transferred状态记录的ID。DISTINCT用来避免同一个ID被多次返回(比如某个ID有多个Received记录)。

方法2:使用LEFT JOIN + IS NULL

通过左关联自身表,筛选出关联不上的记录:

SELECT DISTINCT t1.ID
FROM YourTableName t1
LEFT JOIN YourTableName t2
  ON t1.ID = t2.ID
  AND t2.Status = 'Transferred'
WHERE t2.ID IS NULL;

解释:把原表和自身按ID关联,关联条件限定为Status = 'Transferred'。如果左表的ID在右表中找不到匹配的记录,说明这个ID从未有过Transferred状态,此时右表的ID会是NULL,通过这个条件筛选即可。

方法3:使用GROUP BY + HAVING

通过分组统计来判断是否存在目标状态:

SELECT ID
FROM YourTableName
GROUP BY ID
HAVING MAX(CASE WHEN Status = 'Transferred' THEN 1 ELSE 0 END) = 0;

解释:按ID分组后,用CASE表达式给每个ID标记是否有Transferred状态(有则为1,无则为0)。如果最大值是0,说明这个ID下没有任何Transferred记录。这种写法不需要额外加DISTINCT,因为GROUP BY已经确保ID唯一。

注意事项

记得把代码中的YourTableName替换成你实际使用的表名。如果你的表数据量较大,建议给ID和Status列创建复合索引,能大幅提升查询效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:25:00