将访问IIF转换为sql

时间:2014-09-16 11:07:12

标签: sql-server tsql ms-access

select 
    Project,
    Max([WeekStart] + (Right(IIf([monday] > 0, 0) AND IIf([tuesday] > 0, 1) 
        AND IIf([wednesday] > 0, 2) AND IIf([thursday] > 0, 3) 
        AND IIf([friday] > 0, 4) AND IIf([saturday] > 0, 5) 
        AND IIf([sunday] > 0, 6), 1))) AS LastProjectResourceDate
from 
    ProjectTable t
group by 
    t.Project

MAX()函数中的位来自MS Access,我需要将其转换为t-sql。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

只需继续应用您的WHEN条件,直到所有可能的测试结束。无论哪个资格赛都是真的,首先获胜。

Max( [WeekStart] 
  + CASE when [monday] > 0 then 0
         when [tuesday] > 0 then 1
         when [wednesday] > 0 then 2
         when [thursday] > 0 then 3
         when [friday] > 0 then 4
         when [saturday] > 0 then 5
         when [sunday] > 0 then 6
         else 0 end  LastProjectResourceDate

答案 1 :(得分:1)

使用case语句。而不是IIF(A, B, C)使用case when A then B else C end。在您的情况下,您没有指定CIIF会替换0,因此您需要将其放置。

所以而不是

IIf([tuesday]>0,1) 

使用

case when [tuesday] > 0 then 1 else 0 end

也不是使用And进行按位,而是使用&

最后,我不知道代码的目的是什么,但是 看起来它没有这样做