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

SQL Server 2017中如何基于两个查询结果执行逻辑AND操作并返回指定结果

解决方案:SQL Server 2017 流程执行与队列状态判断

针对你需要的判断逻辑,我整理了一个直接可用的SQL查询,能精准返回你要的结果(满足条件返回1,其他情况返回0)。核心思路是把两个统计条件整合到一个查询中,通过CASE语句完成逻辑判断:

SELECT 
    CASE 
        WHEN workflow_count <= 0 AND message_count > 0 THEN 1
        ELSE 0
    END AS result
FROM (
    -- 统计指定流程最近5分钟的执行记录数
    SELECT COUNT(*) AS workflow_count 
    FROM MY_TABLE 
    WHERE [PROCESS] = 'A' 
      AND [DATE] > DATEADD(MINUTE, -5, GETDATE())
) workflow_stats
CROSS JOIN (
    -- 统计两个队列的总消息数
    SELECT SUM(total) AS message_count 
    FROM (
        SELECT COUNT(*) total FROM [dbo].[QUEUE1] 
        UNION ALL 
        SELECT COUNT(*) total FROM [dbo].[QUEUE2]
    ) queue_stats
) combined_queue;

代码说明:

  • 流程统计部分:子查询workflow_stats负责拉取流程'A'在最近5分钟内的执行次数,用DATEADD(MINUTE, -5, GETDATE())计算当前时间往前推5分钟的阈值,确保只统计指定时间范围内的记录。
  • 队列统计部分:子查询combined_queue通过UNION ALL合并两个队列的记录数(用UNION ALL而非UNION,因为不需要去重,两个队列的消息是独立的),再用SUM得到总消息数。
  • 逻辑判断:通过CROSS JOIN把两个统计结果合并,最后用CASE WHEN检查是否同时满足「无流程执行记录」和「队列有消息」的条件,满足则返回1,否则返回0。

如果需要更灵活的复用(比如随时修改流程名称或时间范围),可以用带参数的版本:

-- 带参数的可复用版本
DECLARE @TargetProcess VARCHAR(50) = 'A';
DECLARE @TimeWindowMinutes INT = 5;

SELECT 
    CASE 
        WHEN workflow_count <= 0 AND message_count > 0 THEN 1
        ELSE 0
    END AS result
FROM (
    SELECT COUNT(*) AS workflow_count 
    FROM MY_TABLE 
    WHERE [PROCESS] = @TargetProcess 
      AND [DATE] > DATEADD(MINUTE, -@TimeWindowMinutes, GETDATE())
) workflow_stats
CROSS JOIN (
    SELECT SUM(total) AS message_count 
    FROM (
        SELECT COUNT(*) total FROM [dbo].[QUEUE1] 
        UNION ALL 
        SELECT COUNT(*) total FROM [dbo].[QUEUE2]
    ) queue_stats
) combined_queue;

这个版本只需要修改开头的参数值,就能快速适配不同的流程和时间范围,不用改动核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:24:08