SQLSERVERのViewをACCESSのMDBでODBC接続したが、ACCESSで表示する値が違う。
(mdbでリンクする際、[固有レコード識別子の選択]は正確に行いましょう)
■事象
ACCESSのMDBで、SQLSERVERで定義しているViewをODBC接続でリンクした。
ACCESSで表示したところ、SQLSERVERのVIEWの表示が一部の列で値が違って表示されている。
例)
以下のようなView_TEST をMDBでリンクしたところ、表示した"単価"、"個数"列がSQLSERVERのViewと違って表示されている。
View_TEST:
select 店舗,販売日,品物,単価,count(*) as 個数 from TEST group by 店舗,販売日,品物,単価 order by A.
[SQLSERVERの表示]
店舗 | 販売日 | 品物 | 単価 | 個数 |
---|---|---|---|---|
支店A | 2015/8/31 | みかん | 250 | 3 |
支店A | 2015/8/31 | バナナ | 100 | 25 |
支店A | 2015/8/31 | バナナ | 198 | 13 |
[ACCESS MDBの表示]
店舗 | 販売日 | 品物 | 単価 | 個数 |
---|---|---|---|---|
支店A | 2015/8/31 | みかん | 250 | 3 |
支店A | 2015/8/31 | バナナ | 100 | 25 |
支店A | 2015/8/31 | バナナ | 100 | 25 |
※ 3行目の単価、個数が198、13のはずが、2行目の値になっている。
■原因と対応
mdbでリンク指定する時に、[固有レコード識別子の選択]という操作があり、そのテーブルの主キーとなる項目を設定するのですが、この項目の選択が誤っていました。今回の場合、group byで集計していたら集計した列を全て指定しないと一意になりません。結果、おかしな表示になってます。(なぜ上記のような表示になるのかは疑問が残るが、そこは追及する意味がないと判断。)
以前から、[固有レコード識別子の選択]は結構いい加減に考えていて、適当に設定していても問題なかったのですが、今回の不具合で改めて重要であることを認識しました。というか、ちゃんと理解して設定しろよ!正しく理解する為の時間を惜しんで、結局遠回りして痛い目に遭う。
(こんな事、結構繰り返してます……OTL)