Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1923 / 2272 ツリー ←次へ | 前へ→

【4592】dcount関数について 情シス初心者 05/3/15(火) 14:36 質問[未読]
【4593】Re:dcount関数について 小僧 05/3/15(火) 15:13 回答[未読]
【4594】Re:dcount関数について クロ 05/3/15(火) 15:20 回答[未読]
【4595】Re:dcount関数について 情シス初心者 05/3/15(火) 16:23 質問[未読]
【4597】Re:dcount関数について クロ 05/3/15(火) 16:38 回答[未読]
【4598】Re:dcount関数について 情シス初心者 05/3/15(火) 17:04 お礼[未読]
【4599】Re:dcount関数について 情シス初心者 05/3/15(火) 17:21 質問[未読]
【4600】Re:dcount関数について クロ 05/3/15(火) 17:40 回答[未読]
【4601】Re:dcount関数について 情シス初心者 05/3/15(火) 17:58 質問[未読]
【4602】Re:dcount関数について クロ 05/3/15(火) 18:04 回答[未読]
【4603】Re:dcount関数について 情シス初心者 05/3/15(火) 18:12 お礼[未読]
【4605】Re:dcount関数について 小僧 05/3/15(火) 19:06 回答[未読]
【4611】Re:dcount関数について 情シス初心者 05/3/16(水) 9:00 お礼[未読]
【4626】Re:dcount関数について クロ 05/3/17(木) 10:44 発言[未読]

【4592】dcount関数について
質問  情シス初心者  - 05/3/15(火) 14:36 -

引用なし
パスワード
   DB作成を任されているんですが、クエリがどうも良く分かりません。
アプリケーションソフトの管理DBを作っています。
インストール数のカウントをしたいのですが、どうすれば良いでしょうか?
以下のような構成で実現したいのですが。。。

テーブルA
  アプリ名
  --------
  Aソフト
  Bソフト
  Cソフト
  Dソフト

テーブルB
  PC名  1    2    3
  ----------------------------
  PC1 Aソフト Dソフト
  PC2 Cソフト Dソフト
  PC3 Aソフト Bソフト Cソフト

クエリ1
  ソフト名  個数
  ---------------
  Aソフト  ○個
  Bソフト  ○個
  Cソフト  ○個
  Dソフト  ○個

↑この「クエリ1」において、それぞれのアプリケーションがいくつインストールされているかをカウントしたいのです。(ちなみにテーブルBのソフト名は、テーブルAで登録したものをルックアップウィザードでリンクしてあります。)
Excelであれば、「クエリ1」の中からAソフトに一致するものをテーブルBから検索し、その一致した数をカウントという風に設定できますが、ACCESSはどういう関数になるのでしょうか。

式1: DCount("[1]&[2]&[3]","[テーブルB]","[1]or[2]or[3]='querys![クエリ1]![ソフト名]'")

↑これだと、全部の数をカウントしてしまいます。

長文すみません。解決のヒントを頂けたらと思います。
よろしくお願いします。

【4593】Re:dcount関数について
回答  小僧  - 05/3/15(火) 15:13 -

引用なし
パスワード
   情シス初心者さんはじめまして。

SELECT テーブルA.アプリ名 AS ソフト名,
DCount("*","テーブルB","[1] = '" & [アプリ名] & "' or [2] = '" & [アプリ名] & "' or [3] = '" & [アプリ名] & "'") & "個" AS 個数
FROM テーブルA;

↑のSQL文をクエリに貼り付けて結果を試してみてください。
こちらの勘違いでしたらすみません。

【4594】Re:dcount関数について
回答  クロ  - 05/3/15(火) 15:20 -

引用なし
パスワード
   テーブルBからユニオンクエリ(仮にクエリ1)を作成

SELECT [1] FROM テーブルB WHERE [1] Is Not Null UNION ALL
SELECT [2] FROM テーブルB WHERE [2] Is Not Null UNION ALL
SELECT [3] FROM テーブルB WHERE [3] Is Not Null;

これで縦方向にアプリ名が登録数だけ並びます。

これを利用して集計クエリで
SELECT クエリ1.[1], Count(クエリ1.[1]) AS 1のカウント
FROM クエリ1
GROUP BY クエリ1.[1];

これで出せます。

更に
ユニオンクエリをサブクエリ化して内包すると...
SELECT Q1.[1], Count(Q1.[1]) AS 1のカウント
FROM (SELECT [1] FROM テーブルB WHERE [1] Is Not Null UNION ALL
SELECT [2] FROM テーブルB WHERE [2] Is Not Null UNION ALL
SELECT [3] FROM テーブルB WHERE [3] Is Not Null) AS Q1
GROUP BY Q1.[1];

こんな感じ?

【4595】Re:dcount関数について
質問  情シス初心者  - 05/3/15(火) 16:23 -

引用なし
パスワード
   小僧さん、クロさん、早速のご回答有難うございました。

クロさんに教えて頂いた方法で見事成功しました!!
有難うございます。

(小僧さん>私のやり方が悪いらしく、上手くいきませんでした。せっかく教えていただいたのにすみません。。)

さらにお聞きしたいのですが、

テーブルA
 アプリ名 在庫数
 ---------------
 Aソフト   5
 Bソフト   4
 Cソフト   8
 Dソフト   6

先ほど作成したインストール数が表示されるクエリに、上のテーブルAの在庫数も一緒に表示したいのですが、どうすれば良いのでしょうか。
よろしくお願いします。

【4597】Re:dcount関数について
回答  クロ  - 05/3/15(火) 16:38 -

引用なし
パスワード
   小僧さんの方はグループ化がされていなかったからだと思います。
SELECT テーブルA.アプリ名 AS ソフト名, DCount("*","テーブルB","[1] = '" & [アプリ名] & "' or [2] = '" & [アプリ名] & "' or [3] = '" & [アプリ名] & "'") & "個" AS 個数
FROM テーブルA, テーブルB
GROUP BY テーブルA.アプリ名;

小僧さんの方法で在庫表示
SELECT テーブルA.アプリ名 AS ソフト名, DCount("*","テーブルB","[1] = '" & [アプリ名] & "' or [2] = '" & [アプリ名] & "' or [3] = '" & [アプリ名] & "'") & "個" AS 個数, テーブルA.在庫数
FROM テーブルA, テーブルB
GROUP BY テーブルA.アプリ名, テーブルA.在庫数;

私の方法で在庫表示
1.別ユニオン
SELECT クエリ1.[1], Count(クエリ1.[1]) AS 1のカウント, テーブルA.在庫数
FROM クエリ1 INNER JOIN テーブルA ON クエリ1.[1] = テーブルA.アプリ名
GROUP BY クエリ1.[1], テーブルA.在庫数;

2.ユニオン内包
SELECT Q1.[1], Count(Q1.[1]) AS 1のカウント, テーブルA.在庫数
FROM (SELECT [1] FROM テーブルB WHERE [1] Is Not Null UNION ALL
SELECT [2] FROM テーブルB WHERE [2] Is Not Null UNION ALL
SELECT [3] FROM テーブルB WHERE [3] Is Not Null) AS Q1 INNER JOIN テーブルA ON Q1.[1]=テーブルA.アプリ名
GROUP BY Q1.[1], テーブルA.在庫数;

【4598】Re:dcount関数について
お礼  情シス初心者  - 05/3/15(火) 17:04 -

引用なし
パスワード
   有難うございます!!
できました。見事、成功です!!!

また疑問点が出ましたら、お助けくださいませ。。

【4599】Re:dcount関数について
質問  情シス初心者  - 05/3/15(火) 17:21 -

引用なし
パスワード
   もう一点お伺いしたいのですが、
テーブルAでアプリケーション名が登録されていても、インストールしていない場合
(テーブルBで未登録)、在庫はX個で、インストール数は0個と表示できないものなのでしょうか。

現在、テーブルAのレコード数と最終的に作成したクエリのレコード数が一致していないんです。

度々すみません。
よろしくお願いします。

【4600】Re:dcount関数について
回答  クロ  - 05/3/15(火) 17:40 -

引用なし
パスワード
   ユニオン内包型
SELECT テーブルA.アプリ名, Count(Q1.[1]) AS 1のカウント, テーブルA.在庫数
FROM [SELECT [1] FROM テーブルB WHERE [1] Is Not Null UNION ALL
SELECT [2] FROM テーブルB WHERE [2] Is Not Null UNION ALL SELECT [3] FROM テーブルB WHERE [3] Is Not Null]. AS Q1 RIGHT JOIN テーブルA ON Q1.[1] = テーブルA.アプリ名
GROUP BY テーブルA.アプリ名, テーブルA.在庫数;

別ユニオン型
SELECT テーブルA.アプリ名, Count(クエリ1.[1]) AS 使用数, テーブルA.在庫数
FROM クエリ1 RIGHT JOIN テーブルA ON クエリ1.[1] = テーブルA.アプリ名
GROUP BY テーブルA.アプリ名, テーブルA.在庫数;

小僧さん型は何にもしなくてもそのようになると思います。

【4601】Re:dcount関数について
質問  情シス初心者  - 05/3/15(火) 17:58 -

引用なし
パスワード
   できました!!
ご丁寧な回答、有難うございます。とても感謝しています。

先ほど教えて頂いた、テーブルBからユニオンクエリを作成するに当たり、
テーブルBのPC名も一緒に抽出したいのですが、それは出来ますか?
よろしくお願いします。

【4602】Re:dcount関数について
回答  クロ  - 05/3/15(火) 18:04 -

引用なし
パスワード
   SETECT PC名, [1] FROM テーブルB WHERE [1] Is Not Null UNION ALL
SETECT PC名, [2] FROM テーブルB WHERE [2] Is Not Null UNION ALL
SETECT PC名, [3] FROM テーブルB WHERE [3] Is Not Null;

な感じで...

【4603】Re:dcount関数について
お礼  情シス初心者  - 05/3/15(火) 18:12 -

引用なし
パスワード
   出来ました!!
本当に有難うございます。

Webやら本やら、いろいろ探していたんですがなかなか見つからなくて。。。
とても感謝しています。

【4605】Re:dcount関数について
回答  小僧  - 05/3/15(火) 19:06 -

引用なし
パスワード
     あらら、帰宅したら解決してますね。

クロさん:

自分のSQLはテーブルBは表示してないので、
グループ化する必要はないかな…?

情シス初心者さん:

どのようにできなかったのが解りませんが…。
新規クエリでSQLビューを表示させて
(テーブルは表示させません)
そのままSQLを貼り付ければ表示される…はず。

一応お題のDCOUNTを使ったSQLも出しておきます。

SELECT テーブルA.アプリ名, CInt(DCount("*","テーブルB","[1] = '" & [アプリ名] & "' or [2] = '" & [アプリ名] & "' or [3] = '" & [アプリ名] & "'"))+[在庫数] AS 個数
FROM テーブルA;

【4611】Re:dcount関数について
お礼  情シス初心者  - 05/3/16(水) 9:00 -

引用なし
パスワード
   小僧さん、有難うございます。
dcountでしか出来ないものなのかと思っていたんですが、
SQLを使えばどういう風にも出来る事が良く分かりました。
時間のある時に小僧さんの方法でも試してみようと思います。

【4626】Re:dcount関数について
発言  クロ  - 05/3/17(木) 10:44 -

引用なし
パスワード
   >クロさん:
>自分のSQLはテーブルBは表示してないので、
>グループ化する必要はないかな…?

そうですね...スミマセンm(..)m
間違えました...(鬱

1923 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078265
(SS)C-BOARD v3.8 is Free