- 締切済み
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)’を 含んでいないクエリを実行しようとしました。というエラーがでます。; 調べても調べてもうまくできません。ご教授お願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Siegrune
- ベストアンサー率35% (316/895)
まず、簡単なほう。 詳細番号>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)
日にちが経っているので解決されたかもしれませんが。 たとえば、テーブルのデータが以下のようなものだとします。 便宜上、いくつかのフィールドは省いています。 社員番号 業務番号 詳細番号 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文も少々難点が・・・・・・)