• 締切済み

Access2010 SQL内でのNULL判断

業務でAccess2010を使用しています。 Accessのコードビルダーで書くINSERT文の中で、ある項目がNULLだったら、1を入れて、 NULLじゃなかったら、その項目の一番大きい値に+1して入れたいのですが、なかなかうまくいきません。 今はこんな感じのinsert文です。 INSERT INTO 職歴詳細 ( 社員番号, 業務番号, 詳細番号, スキル区分, スキルコード ) SELECT '11111', 9,IIF(ISNULL(詳細番号),1,MAX(詳細番号)+1), 1, '01' FROM 職歴詳細 WHERE 社員番号='11111' AND 業務番号=9; しかしこれでは、集計関数の一部として指定された式’IIF(ISNULL(詳細番号),1,MAX(詳細番号)+1)’を 含んでいないクエリを実行しようとしました。というエラーがでます。; 調べても調べてもうまくできません。ご教授お願いいたします。

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

まず、簡単なほう。 詳細番号>0またはNullという前提なら、 IIF(ISNULL(詳細番号),1,MAX(詳細番号)+1) を MAX(IIF(ISNULL(詳細番号),1,詳細番号+1)) としてあげればいいと思うのですが。 本筋の(とも思えませんが、書いてあるSQLの意図に沿ったと思われる)ほう。 IIF(ISNULL(MAX(詳細番号)),1,MAX(詳細番号)+1)  でもいけるかもしれない。 詳細番号がNullのレコードと1のレコードがあったとすると、 ISNULL(詳細番号)が成立するレコードと成立しないレコードがあり、 MAX(詳細番号)+1は2となる。 このとき、 IIFのISNULL(詳細番号)が成立して1とすべきか、成立せずに、2とすべきか判断できないSQLに なっている。 詳細番号が1のレコードがあるのだからISNULLが成立しないといいたければ、 ISNULL(MAX(詳細番号))と書かないとそう読み取れないとエラーになっていると思われます。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

日にちが経っているので解決されたかもしれませんが。 たとえば、テーブルのデータが以下のようなものだとします。 便宜上、いくつかのフィールドは省いています。 社員番号  業務番号  詳細番号 1111               3   2               6 1111 1111                9  65                13  96 1111                5   6                2 1111                  上記にはい社員番号が1111の詳細番号にNullの レコードがいくつかあります。このテーブルを どのように変更したいのか具体的に示して もらえませんか。 それと、業務番号はどのような性質の番号ですか。 たとえば、オートナンバーのような個別の レコードに振られた重複しない番号だとか。 もし、業務番号がそのような番号でないならば テーブルのレコードの並びは、並びを 確定させるような上記のようなフィールドがないと レコードの並びは適当なものですから 補足の内容によっては、以下のような各レコードが 重複しないような番号、たとえばオートナンバー のようなフィールドを作る必要があります。 ID  社員番号  業務番号  詳細番号 1    1111               3 2      2               6 3    1111 4    1111               9 5     65               13 6     96 7    1111               13 8      6                2 9    1111 なお、質問の内容からすると、質問のSQL文のような 追加クエリではなく、更新クエリを使うのだろうと 思いますが。(そのSQL文も少々難点が・・・・・・)

関連するQ&A