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

如何在CASE语句内调用函数取值,基于各函数返回最大值返回对应状态

实现方案

完全可以通过CASE语句实现该需求,根据你当前只有2组流程耗时的场景,有两种常用实现方式:

方式1:直接在CASE中比对(适用于流程少的场景)

直接在CASE的判断分支里比对两个自定义函数的返回值,根据最大值返回对应状态,示例代码如下:

SELECT 
    -- 此处保留你原有查询的其他字段
    CASE
        WHEN dbo.WorkTime(o.imported_date,pkd.create_date) >= dbo.WorkTime(pkd.picked_date, hums.packed_on_date) THEN '入库审核流程耗时最长'
        ELSE '拣货打包流程耗时最长'
    END AS max_consume_process_status
FROM 你的主表名 o
-- 此处保留你原有的表关联逻辑,比如 JOIN pkd ON 关联条件 JOIN hums ON 关联条件

如果存在日期为空导致函数返回NULL的情况,可以用ISNULL(函数返回值, 0)处理,避免判断逻辑异常

方式2:预计算耗时后再判断(扩展性更好,适合后续要新增流程的场景)

如果后续可能新增更多需要统计耗时的流程,可以用CTE或者子查询先把所有流程的耗时计算出来,再进行判断,后续新增流程只需要补充预计算字段和判断分支即可:

WITH process_duration AS (
    SELECT
        -- 此处保留你原有查询的其他字段
        dbo.WorkTime(o.imported_date,pkd.create_date) AS import_create_duration,
        dbo.WorkTime(pkd.picked_date, hums.packed_on_date) AS pick_pack_duration
    FROM 你的主表名 o
    -- 此处保留你原有的表关联逻辑
)
SELECT 
    *,
    CASE
        WHEN import_create_duration >= pick_pack_duration THEN '入库审核流程耗时最长'
        ELSE '拣货打包流程耗时最长'
    END AS max_consume_process_status
FROM process_duration

如果后续新增更多流程,你使用的数据库如果支持GREATEST函数(SQL Server 2022及以上版本、MySQL、PostgreSQL等均支持),还可以直接用该函数取多个耗时的最大值,再匹配对应流程即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:15:11