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)
您正在使用Simple Case statement
不允许使用逻辑表达式的位置.你需要使用一个Searched CASE expression
.但是在你的情况下,因为你正在使用一个函数,从函数中获取每个表达式的返回值会有点代价.
我建议你使用a sub query with a Searched case
bellow.
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)
归档时间: |
|
查看次数: |
25934 次 |
最近记录: |