2016-01-13 34 views
0

SQL Case語句我有以下SQL查詢:的結果

SELECT IIF(clock_to - clock_at_from < 0, 
      12 - (clock_at_from - clock_to), 
      clock_to - clock_at_from) AS clock_pos 
FROM Condition 

從1-10

我覺得我要瓶坯上clock_pos CASE語句輸出的數字,其中

If clock_pos = 1 value = 3 
If clock_pos = 2 value = 4 
If clock_pos > 3 value = 5 

然後添加最終結果作爲條件表中的新列...

但我不是請注意如何使用名爲clock_pos的結果編寫此代碼,或者完全有更好的方法。

@EDIT按照TONY嵌套如果嘗試。我無法做出額外如果statment

SELECT IIF(clock_to - clock_at_from < 0, 
      IIF(12 - (clock_at_from - clock_to) >= 3, 5, 12 - (clock_at_from - clock_to)), 
      clock_to - clock_at_from) as clock_pos 
FROM Conditions 
+0

使用嵌套的'if'語句。我不相信Access中有'CASE'聲明。 – Tony

+0

@Tony我嘗試過,並且可以正常工作,但我只能寫一個,上面的例子 –

+0

使用Switch語句。 https://support.office.com/en-us/article/Switch-Function-d750c10d-0c8e-444c-9e63-f47504f9e379?CorrelationId=fb10a569-3985-4651-99b3-44a6bccff767&ui=en-US&rs=en-US&ad= US – Fred

回答

1

MS訪問SQL實際上允許使用計算列在相同的查詢中:

SELECT IIF(clock_to - clock_at_from < 0, 
      12 - (clock_at_from - clock_to), 
      clock_to - clock_at_from) AS clock_pos, 
     IIF(clock_pos = 1, 3, 
      IIF(clock_pos = 2, 4, 
       IIF(clock_pos > 3, 5, NULL))) As clock_pos_value 
FROM Condition 
0

似乎很簡單,如果你使用子查詢到CASE邏輯轉換爲嵌套IIF()

SELECT IIF(clock_pos = 1, 3 
      IIF(clock_pos = 2, 4, 
       IIF(clock_pos > 3, 5, NULL) 
       ) 
     ) as [value] 
FROM (SELECT IIF(clock_to - clock_at_from < 0, 
       IIF(12 - (clock_at_from - clock_to) >= 3, 
        5, 12 - (clock_at_from - clock_to) 
        ), clock_to - clock_at_from 
       ) as clock_pos 
     FROM Conditions 
    ) as c 
+0

然而,當嘗試測試出錯時,邏輯有意義:SELECT語句包含保留的工作或參數名拼寫錯誤或缺少。 –

+0

這就是'作爲價值'造成的。 「價值」是一個保留字。嘗試'作爲[價值]' – Fred

+0

@TristanForward。 。 。我只是按照問題中使用的名稱。方括號需要。 –