Sql server SQL Server-在带有DATEDIFF函数的WHERE子句中的情况

Sql server SQL Server-在带有DATEDIFF函数的WHERE子句中的情况,sql-server,where-clause,datediff,case-when,Sql Server,Where Clause,Datediff,Case When,我试图使用case-when和DATEDIFF函数执行下面的where语句。但是我有语法错误。请帮帮我 WHERE -- primary contract is Flowing CTS.ContractStatusIdentifier = 'FLW' AND (CASE WHEN VMO.ProvinceOrStateCode = 'ON'

我试图使用case-when和
DATEDIFF
函数执行下面的where语句。但是我有语法错误。请帮帮我

WHERE
    -- primary contract is Flowing
    CTS.ContractStatusIdentifier = 'FLW'                                         
    AND (CASE 
            WHEN VMO.ProvinceOrStateCode = 'ON'
               THEN DATEDIFF (dd, CTR.RenewalDate, @currentdate) >= 75
               ELSE DATEDIFF (dd, CTR.RenewalDate, @currentdate) >= 45)
    AND VMO.ProvinceOrStateCode IN ('ON','AB')

显然,
WHERE
子句语法

AND (CASE 
        WHEN VMO.ProvinceOrStateCode = 'ON'
           THEN DATEDIFF (dd, CTR.RenewalDate, @currentdate) >= 75
           ELSE DATEDIFF (dd, CTR.RenewalDate, @currentdate) >= 45)
这是无效的。让它变得简单是相当简单的,请尝试

AND DATEDIFF (dd, CTR.RenewalDate, @currentdate)
    >= (CASE 
           WHEN VMO.ProvinceOrStateCode = 'ON'
               THEN 75
               ELSE 45
        END)

祝你好运

选择[supp_call_tckt_num],UPPER([assigned_to])作为assigned_to

分配的\u日期、关闭\u日期、diffday=关闭\u日期为空时的情况

datediff(d,分配的_日期,getdate())else

datediff(d,分配日期,结束日期)结束

上限([调用源])作为调用源

上级([科目类型])作为科目类型,[mdn]

上级([状态])作为状态,上级([公司名称])作为公司名称

UPPER([rep_id])作为rep_id,UPPER([caller_first_name])作为caller_first_name

上限([呼叫者姓氏])作为呼叫者姓氏[账号]

上层([网络])作为网络,上层([发行类型])作为发行类型

上层([问题])作为问题,上层([子类型])作为子类型,上层([问题描述])

作为prob_desc_res,UPPER([注释])作为注释,[票号]来自 [ewts_tracker]带有(NOLOCK),其中[ewts_tracker]。[升级]=

“是”和
datediff(d,isnull(assigned_date,getdate()),close_date)>='3'

两个问题:首先,
案例
需要由缺少的
结束
终止。其次,T-SQL中的CASE是一个返回单个原子值的表达式—您不能有选择地执行一个或另一个代码块,您需要返回一个值(如数字或字符串)—而不是代码块