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

如何通过SQL查询根据Status字段值设置布尔变量?

实现需求的SQL方案

当然可以在查询里直接实现这个布尔变量的逻辑,以下是几种实用的写法:

方法一:用EXISTS判断是否存在Cancel

这种写法逻辑最直观,直接检查目标范围内有没有Cancel记录:

SELECT 
  CASE 
    WHEN EXISTS (
      SELECT 1 
      FROM tablename 
      WHERE Id = 77 
        AND ThreadId IN (30, 40, 50, 60, 69, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 231, 232, 233, 234, 240, 241, 242, 243, 244, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400)
        AND Status = 'Cancel'
    ) THEN FALSE 
    ELSE TRUE 
  END AS IsAllAccepted

方法二:用聚合函数MAX判断

因为Status只有Cancel和Accept两种值,字符串比较中Cancel比Accept大(首字母C的ASCII码高于A),所以可以通过MAX函数快速判断:

SELECT 
  CASE 
    WHEN MAX(Status) = 'Accept' THEN TRUE 
    ELSE FALSE 
  END AS IsAllAccepted
FROM tablename 
WHERE Id = 77 
  AND ThreadId IN (30, 40, 50, 60, 69, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 231, 232, 233, 234, 240, 241, 242, 243, 244, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400)

逻辑说明:如果所有Status都是Accept,MAX的结果就是Accept,返回true;只要有一个Cancel,MAX结果就是Cancel,返回false。

方法三:用计数对比验证

统计总记录数和Accept记录数,两者相等就说明没有Cancel:

SELECT 
  CASE 
    WHEN COUNT(*) = COUNT(CASE WHEN Status = 'Accept' THEN 1 END) THEN TRUE 
    ELSE FALSE 
  END AS IsAllAccepted
FROM tablename 
WHERE Id = 77 
  AND ThreadId IN (30, 40, 50, 60, 69, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 231, 232, 233, 234, 240, 241, 242, 243, 244, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400)

逻辑说明:COUNT(CASE WHEN Status='Accept' THEN 1 END)只会统计Status为Accept的记录,和总记录数COUNT(*)相等,就代表所有记录都是Accept。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:20:12