2016-08-24 74 views
1

我正在寻找一些帮助将访问查询转换为sql服务器。将使用IIF的访问查询转换为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) 

任何人的帮助有任何想法挣扎?

感谢

+0

你确定在MS Access工作?这看起来像使用'iif'的一种非常奇怪的方式。 – sstan

+0

是的,肯定适用于Access – user6753539

回答

0

试试这个

AND 5 = CASE WHEN [if_submission].[submissiontypeid] = 8 
      THEN [payrollruns].[payemonth] 
      ELSE [if_submission].[periodnumber] 
     END 
+0

谢谢,正是我所需要的。周围环顾四周,无法找到任何符合此答案的东西,一定是在寻找错误的东西! – user6753539

0

您可以使用CASE expression

简单的CASE表达式:

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

搜索CASE表达式:

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

如果您正在使用SQL SERVER 2012+然后IIF支持,但语法必须是有点不同。

IIF([if_submission].[submissiontypeid] = 8,[payrollruns].[payemonth], 
              [if_submission].[periodnumber]) = 5 

否则我会做到这一点使用AND/OR逻辑

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