如何在SQL Server中从多步骤状态计算流程的整体进度状态?
SQL Server 多步骤流程整体状态查询方案
根据你给出的状态判断规则,我们可以通过分组判断的方式实现每个流程的整体状态计算,核心逻辑是按优先级依次判断:只要存在in-progress的步骤就优先返回该状态,其次判断是否全为queued,最后默认全为finished。
基础查询(仅返回processId和整体状态)
SELECT processId, CASE -- 优先级最高:只要有步骤处于'in-progress',整体状态即为该值 WHEN COUNT(CASE WHEN status = 'in-progress' THEN 1 END) > 0 THEN 'in-progress' -- 其次:所有步骤都是'queued'时返回该状态 WHEN COUNT(CASE WHEN status != 'queued' THEN 1 END) = 0 THEN 'queued' -- 最后:排除前两种情况,必然是所有步骤都为'finished' ELSE 'finished' END AS overallStatus FROM Step GROUP BY processId;
关联Process表查询(包含流程其他字段)
如果需要同时查询Process表的其他信息,可以关联Process表后进行状态判断:
SELECT p.id AS processId, p.[other stuff], -- 替换为你需要的实际字段名 CASE WHEN EXISTS (SELECT 1 FROM Step s WHERE s.processId = p.id AND s.status = 'in-progress') THEN 'in-progress' WHEN NOT EXISTS (SELECT 1 FROM Step s WHERE s.processId = p.id AND s.status != 'queued') THEN 'queued' ELSE 'finished' END AS overallStatus FROM Process p;
逻辑说明
in-progress优先级最高:无论其他步骤状态如何,只要存在一个in-progress的步骤,流程整体状态直接判定为in-progress- 全
queued判断:当没有in-progress步骤时,检查所有步骤是否均为queued,是则返回该状态 - 默认
finished:排除前两种情况后,剩余场景必然是所有步骤都处于finished状态
内容的提问来源于stack exchange,提问作者Zenith
相关产品推荐
相关产品推荐

