ここから本文です

解決済みの質問

Accessの初心者です。次のようなことを行う場合の方法を教えてください。

sunameri_108さん

Accessの初心者です。次のようなことを行う場合の方法を教えてください。

集計表とエラーリストがあります。
エラーリストの人名とエラー内容別にの個数を集計して、集計表に表示したいです。
集計表には、エラーリストにでる人名およびエラーがすべて入力されています。

元データ
<集計表>
Aさん : エラーA
Aさん : エラーB
Bさん : エラーA
Bさん : エラーB

<エラーリスト>
Aさん : エラーA
Aさん : エラーA
Bさん : エラーA
Bさん : エラーB


表示したいデータ
<集計表>
Aさん : エラーA : 2
Aさん : エラーB : 0
Bさん : エラーA : 1
Bさん : エラーB : 1

各々のテーブルを作成してクエリで集計できますか?
別な方法でも構いませんので、可能な方法があれば教えてください。

違反報告

ベストアンサーに選ばれた回答

ganmo_dokkiさん

Accessのことはサッパリ分かんないですが、似たような仕組みであろう(本当?)SqlServerは使います。

以前会社で同僚にAccessでクエリを作ってくれって言われて、SqlServerと似たようなものですから任せてくださいっていって、やってみましたが、クエリ作成の操作がちんぷんかんぷんでわかんない感じで役に立てなかった感じで、すみません、クエリの作り方はわかんないので、SQL文を紹介いたします(よくわかんないですけどクエリって結局SQL文をGUIで作っているだけで、実行しているのはSQL文な感じです)。SQL文はわかるかな。わかんないかな。

AccessでもSQL文を直接記述することができます。具体的な操作は手元にAccessがないので・・・。

では質問についてですが、文中に0件の場合も表示するようになっていますので、これは結合して参照するしかない感じですね。簡単に言えば以下の感じになります。フィールド名がわかんないので、両方のテーブル共に、名前をMEMBER、エラーをERRORとしますね。

SELECT LIST.MEMBER , LIST.ERROR , COUNT( DETAIL.ERROR ) FROM [集計表] LIST
LEFT OUTER JOIN [エラーリスト] DETAIL ON
LIST.MEMBER = DETAIL.MEMBER AND LIST.ERROR = DETAIL.ERROR
GROUP BY LIST.MEMBER , LIST.ERROR , DETAIL.ERROR

多分Accessが分かる人なら、クエリの作成方法を教えてくれると思います。

○補足
よくわかんないですが、上のコマンドはSqlServer用に書いたものです。普通に処理できますよ。私はGUIなんて使わないでコマンド書けます。またOUTER JOIN にLEFTついていますしね。どこを見てるの?また、TransactSqlだと何故AS句を使わないとエラーになるの?どういう理屈?ありえないでしょう?テーブルのエイリアスにAS句なんて使えるの?それって単に[エラーリスト] DETAIL の書き方を知らないだけではないですか(Accessだと違うの?)?テーブルにエイリアスをつけているだけなのですが・・・。基本中の基本でしょう。

多分、SqlServerとAccessだと、コマンドが違うんですね。その点は、私の落ち度でした。

AccessはTransactSqlだから・・・SqlServerもTransactSqlを採用していますが・・・。

  • 違反報告
  • 編集日時:2008/2/18 20:20:00
  • 回答日時:2008/2/17 00:09:25

この質問は投票によってベストアンサーが選ばれました!

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 2点(5点満点中)2人が役に立つと評価しています。

ベストアンサー以外の回答

(1件中1〜1件)

 

ataddprocerさん

ganmo_dokki さん、
Accessの質問なんで Oracle用の PL-SQLだとチョッチ可哀相。
Oracle用の3rdパーティのGUIを使ったのかな?

せめて回答寄せるのならAccessくらいは買ってリンクテーブル接続してSQL作ってあげないと。

SQL Server の場合は T-SQLだからテーブル別名は AS 句 を使わないとほとんどエラーになる。
"FROM [集計表] LIST" じゃなくて "FROM [集計表] AS LIST"
ちなみに、AccessもSQL ServerもOracleとは違って列名に日本語とか使っても親和性が高いから AS句変換自体が比較的無意味。

あとOUTER JOIN は T-SQLの場合 LEFT 、RIGHTが必須。

> SQL文はわかるかな。わかんないかな。

Accessユーザは全員、クエリのデザインビュー画面で[表示]-[SQLビュー]をクリックしてJET SQLとか使ってるから心配はいらない。
ここに質問に来る人はSQLでしか回答受け取れないし(笑)

Accessの質問箱でBA稼ぎたかったら、
JETクエリSQLと親和性の高いT-SQLを覚えてからの方が・・・・・
GUIだけはこっちの方が良いのでヘタなOracleゴー○ド、プラ○ナのモタ公よりは作るの早いよん。

で、こっからが回答。

SELECT 集計表.MEMBER, 集計表.ERROR, Count(エラーリスト.ERROR) AS ERRORのカウント
FROM 集計表 LEFT JOIN エラーリスト
ON (集計表.ERROR = エラーリスト.ERROR) AND (集計表.MEMBER = エラーリスト.MEMBER)
GROUP BY 集計表.MEMBER, 集計表.ERROR, エラーリスト.ERROR;

ちなみに例題では以下の条件だから。

> エラーリストの人名とエラー内容別にの個数を集計して、

Aさん : エラーA : 2
Aさん : エラーB : 0
Bさん : エラーA : 1
Bさん : エラーB : 1

・・・・って質問に書いてあるけどホントは

Aさん : エラーA : 3
Aさん : エラーB : 0
Bさん : エラーA : 0
Bさん : エラーB : 1

・・・・じゃないかな???

知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

ただいまの回答者

05時04分現在

782
人が回答!!

1時間以内に1,429件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する