使用IIF将访问查询转换为SQL Server

使用IIF将访问查询转换为SQL Server,sql,sql-server,ms-access,Sql,Sql Server,Ms Access,我正在寻找一些帮助,将access查询转换为sql server 大部分我都很好,但我正在努力解决IIF部分 SELECT * FROM (([if_submission] LEFT JOIN [payrollruns] ON [if_submission].[periodnumber] = [payrollruns].[runid]) LEFT JOIN [if_rti_finalfps_q] ON [payroll

我正在寻找一些帮助,将access查询转换为sql server

大部分我都很好,但我正在努力解决IIF部分

SELECT * 
FROM   (([if_submission] 
     LEFT JOIN [payrollruns] 
            ON [if_submission].[periodnumber] = [payrollruns].[runid]) 
    LEFT JOIN [if_rti_finalfps_q] 
           ON [payrollruns].[runid] = [if_rti_finalfps_q].[runid]) 
   LEFT JOIN [if_rti_eps] 
          ON [if_submission].[submissionid] = [if_rti_eps].[submissionid] 
WHERE  [if_submission].[taxyear] = 2016 
   AND ( **IIF([if_submission].[submissiontypeid] = 8, 
         [payrollruns].[payemonth] = 5, 
               [if_submission].[periodnumber] = 5)** ) 
   AND ( [if_submission].[submissiontypeid] = 8 
          OR [if_submission].[submissiontypeid] = 10 ) 
   AND [if_submission].[testinlive] = 0 
ORDER  BY submissiontypeid 
这就是我需要帮助的地方

IIF([if_submission].[submissiontypeid] = 8, 
         [payrollruns].[payemonth] = 5, 
               [if_submission].[periodnumber] = 5)
有人有什么想法吗

谢谢你试试这个

AND 5 = CASE WHEN [if_submission].[submissiontypeid] = 8 
          THEN [payrollruns].[payemonth]
          ELSE [if_submission].[periodnumber]
        END
试试这个

AND 5 = CASE WHEN [if_submission].[submissiontypeid] = 8 
          THEN [payrollruns].[payemonth]
          ELSE [if_submission].[periodnumber]
        END
您可以使用:

简单的大小写表达式:

CASE input_expression   
    WHEN when_expression THEN result_expression [ ...n ]   
    [ ELSE else_result_expression ]   
END
CASE  
    WHEN Boolean_expression THEN result_expression [ ...n ]   
    [ ELSE else_result_expression ]   
END  
搜索的大小写表达式:

CASE input_expression   
    WHEN when_expression THEN result_expression [ ...n ]   
    [ ELSE else_result_expression ]   
END
CASE  
    WHEN Boolean_expression THEN result_expression [ ...n ]   
    [ ELSE else_result_expression ]   
END  
您可以使用:

简单的大小写表达式:

CASE input_expression   
    WHEN when_expression THEN result_expression [ ...n ]   
    [ ELSE else_result_expression ]   
END
CASE  
    WHEN Boolean_expression THEN result_expression [ ...n ]   
    [ ELSE else_result_expression ]   
END  
搜索的大小写表达式:

CASE input_expression   
    WHEN when_expression THEN result_expression [ ...n ]   
    [ ELSE else_result_expression ]   
END
CASE  
    WHEN Boolean_expression THEN result_expression [ ...n ]   
    [ ELSE else_result_expression ]   
END  

如果您使用的是
SQLServer2012+
,则支持
IIF
,但语法需要稍有不同

IIF([if_submission].[submissiontypeid] = 8,[payrollruns].[payemonth],
                                           [if_submission].[periodnumber] ) = 5
否则,我将使用
和/或
逻辑执行此操作

......
(
(
[if_submission].[submissiontypeid] = 8 and [payrollruns].[payemonth] = 5
) 
or 
(
[if_submission].[periodnumber] = 5 and [if_submission].[submissiontypeid] <> 8
)
)
.....
。。。。。。
(
(
[if_submission].[submissiontypeid]=8和[payrollruns].[payemonth]=5
) 
或
(
[if_submission].[periodnumber]=5和[if_submission].[submissiontypeid]8
)
)
.....

如果您使用的是
SQL SERVER 2012+
,则支持
IIF
,但语法需要稍有不同

IIF([if_submission].[submissiontypeid] = 8,[payrollruns].[payemonth],
                                           [if_submission].[periodnumber] ) = 5
否则,我将使用
和/或
逻辑执行此操作

......
(
(
[if_submission].[submissiontypeid] = 8 and [payrollruns].[payemonth] = 5
) 
or 
(
[if_submission].[periodnumber] = 5 and [if_submission].[submissiontypeid] <> 8
)
)
.....
。。。。。。
(
(
[if_submission].[submissiontypeid]=8和[payrollruns].[payemonth]=5
) 
或
(
[if_submission].[periodnumber]=5和[if_submission].[submissiontypeid]8
)
)
.....

您确定在MS Access中工作吗?使用
iif
这看起来真是一种奇怪的方式。是的,它确实适用于Access。你确定它适用于MS Access吗?使用
iif
,这看起来真是一种奇怪的方式。是的,它确实适用于访问谢谢,这正是我所需要的。花了很长时间四处寻找,却找不到任何符合这个答案的东西,一定是找错了!!谢谢,这正是我需要的。花了很长时间四处寻找,却找不到任何符合这个答案的东西,一定是找错了!!