首页 > 解决方案 > SQL Server 复杂的 CASE 语句(先检查某个字段的值,然后选择 CASE stmt used)

问题描述

在我知道需要以哪种方式准备 CASE 语句之前,我将如何编写一个需要先检查字段值的 CASE 语句?我把它写成下面的 IF:

select *,
    IF schedule_at is not NULL THEN CASE 
        when actual_start < schedule_at THEN 'Early'
        else 'Late'
        END as Delivery,
    ELSE
        case 
            when actual_start between schedule_from and schedule_to THEN 'On Time'
            when datediff(minute,actual_start,schedule_from) < 0 THEN 'Late'
            else 'Early'
            END as Delivery,
    END
from some_dates_table

标签: sql-server

解决方案


嗨,如果我明白你想要这个查询应该是什么工作:

select *,
    Case when schedule_at is not NULL THEN (CASE 
        when actual_start < schedule_at THEN 'Early'
        else 'Late'
        END) 
    ELSE
        (case 
            when actual_start between schedule_from and schedule_to THEN 'On Time'
            when datediff(minute,actual_start,schedule_from) < 0 THEN 'Late'
            else 'Early'
            END) END as Delivery
from some_dates_table

推荐阅读