2016-08-24 51 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 
) 
) 
.....