2017-02-12 5 views
1

私がしようとしているのは、2つの列があるテーブルを作成することです.2番目の列はVariable1のクラスタリングで、その値に従って分類します。 < 0.1の場合は、値が0.1〜0.2の場合は「0-10」、次に「21〜100」を表示する場合は「11〜20」、それ以外の場合は「0〜10」を表示します。以下のコードを実行すると、「構文演算子が見つかりません」というエラーが表示されます。SQLアクセスで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

フォーマットされたクエリを一回見て、問題の内容を教えてください。 'IIF()'は 'SELECT'ルックで正当なものを呼び出しますが、' GROUP BY'は混乱しています。入れ子にされた 'IIF'はちょうど誤字のようです。 –

答えて

2

をあなたはselectのコードで明らかに構文エラー(2 iif()秒を持っていますgroup byでは3つ)。一般に、switchはネストされたiif()sよりも扱いが簡単です。これは、他のデータベースにたくさん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()を通じて反復ロジックは、あなたが第二の条件のための2つの部品を必要としないので。これにより、エラーの可能性も少なくなります。

第二に、あなたはどんな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