使用大于登录CASE表达式的tsql

Sta*_*ace 10 t-sql sql-server case

(case [dbo].[YearsInService]([DateEngaged],getdate())
   when (0) then (0) 
   when (1) then (4) 
   when (2) then (8)
    when (3) then (12)
     when (4) then (32) 
     when (5) then (40) 
     when (6) then (48) 
     when (7) then (56) 
     when (8) then (104) 
     when (9) then (117) 
     when (10) then (150) else (-1) end)
Run Code Online (Sandbox Code Playgroud)

现在在我的最后一行,我怎么能说10和以上应该返回150?

Lam*_*mak 11

你不能,这CASE YourFunction WHEN ...只是为了平等.如果您需要使用"大于",则需要以这种方式重写表达式:

CASE WHEN [dbo].[YearsInService]([DateEngaged],getdate()) = 0 THEN 0
WHEN [dbo].[YearsInService]([DateEngaged],getdate()) = 1 THEN 4
WHEN.....
WHEN [dbo].[YearsInService]([DateEngaged],getdate()) >= 10 THEN 150 ELSE -1 END
Run Code Online (Sandbox Code Playgroud)


Kaf*_*Kaf 8

您正在使用Simple Case statement不允许使用逻辑表达式的位置.你需要使用一个Searched CASE expression.但是在你的情况下,因为你正在使用一个函数,从函数中获取每个表达式的返回值会有点代价.

这是简单案例和搜索CASE语法的MSDN链接

我建议你使用a sub query with a Searched casebellow.

select case when results = 0 then 0
            when results = 1 then 4
            ...
            when results >= 10 then 150
            else -1 end as CaseResults
from (select [dbo].[YearsInService]([DateEngaged],getdate()) results
      from yourTable
     ) Temp
Run Code Online (Sandbox Code Playgroud)