2017-02-12 62 views
1

我想要做的是創建一個表,其中有兩列,第二列是Variable1的集羣,根據其值對其進行分類;如果< 0.1,那麼我想要顯示「0-10」,如果值在0.1和0.2之間,那麼顯示「11-20」,如果是其他,則顯示「21-100」。當我運行下面的代碼時,出現「Missing syntax operator error」。如何在SQL Access中連接IIF

SELECT Variable2_name, 
     IIF(Variable1_name< 0.1, 
      "0 - 10", 
      IIF(Variable1_name >= 0.1 AND Variable1_name < 0.2, 
       "11 - 20", 
       "21 - 100") 
     ) AS Bucket 
FROM Table 
GROUP BY Variable2_name, 
     IIF(Variable1_name < 0.1, 
      "0 - 10", 
      IIF(Variable1_name < 0.1, 
       "0 - 10", 
       IIF(Variable1_name >= 0.1 AND Variable1_name < 0.2, 
        "11 - 20", 
        "21 - 100") 
      ), 
ORDER BY Variable2_name 

問題必須在IIF條款之內,因爲當我有一個簡單的IIF條款時,它可以正常工作。語法有什麼問題?在另一個IIF子句中連接IIF子句的方式是什麼?您如何將它包含在GROUP BY子句中?

非常感謝!

非常感謝

+2

看一下你的格式化查詢,告訴我們問題是什麼。在'SELECT'中調用的'IIF()'看起來是合法的,但是'GROUP BY'是混亂的,在那裏有一個嵌套的'IIF',看起來只是一個錯字。 –

回答

2

你的代碼(二iif() S IN的select有一個明顯的語法錯誤三個在group by)。通常,switch比嵌套iif()更容易使用。它的工作原理很像case在其他數據庫:

SELECT Variable2_name, 
     SWITCH(Variable1_name < 0.1, "0 - 10", 
       Variable1_name < 0.2, "11 - 20", 
       "21 - 100" 
      ) AS Bucket 
FROM Table 
GROUP BY Variable2_name, 
     SWITCH(Variable1_name < 0.1, "0 - 10", 
       Variable1_name < 0.2, "11 - 20", 
       "21 - 100" 
       ) 
ORDER BY Variable2_name; 

注:因爲它通過SWITCH()迭代的邏輯,你不需要兩個部分的第二個條件。這也減少了錯誤的可能性。

二,不使用任何GROUP BY功能,讓你可以更加簡單地使用SELECT DISTINCT

SELECT DISTINCT Variable2_name, 
     SWITCH(Variable1_name < 0.1, "0 - 10", 
       Variable1_name < 0.2, "11 - 20", 
       "21 - 100" 
      ) AS Bucket 
FROM Table 
ORDER BY Variable2_name; 

而且,DISTINCT是沒有必要的,如果你知道該值已經截然不同。

1

而且您畸形的剪切和粘貼,就可以稍微降低它:

SELECT Variable2_name, 
     IIF(Variable1_name < 0.1, 
      "0 - 10", 
      IIF(Variable1_name < 0.2, 
       "11 - 20", 
       "21 - 100") 
     ) AS Bucket 
FROM Table 
GROUP BY Variable2_name, 
     IIF(Variable1_name < 0.1, 
      "0 - 10", 
      IIF(Variable1_name < 0.2, 
       "11 - 20", 
       "21 - 100") 
     ) 
ORDER BY Variable2_name