Access VBA質問箱 IV

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

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


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

【6485】複数テーブルのデータ集計 チリ子 05/10/14(金) 13:40 質問[未読]
【6488】Re:複数テーブルのデータ集計 てっちゃん 05/10/14(金) 15:06 回答[未読]
【6490】Re:複数テーブルのデータ集計 チリ子 05/10/14(金) 16:25 質問[未読]
【6494】Re:複数テーブルのデータ集計 てっちゃん 05/10/14(金) 17:03 回答[未読]
【6495】Re:複数テーブルのデータ集計 てっちゃん 05/10/14(金) 18:02 回答[未読]
【6508】Re:複数テーブルのデータ集計 チリ子 05/10/17(月) 10:52 質問[未読]
【6509】Re:複数テーブルのデータ集計 てっちゃん 05/10/17(月) 11:59 回答[未読]
【6512】Re:複数テーブルのデータ集計 チリ子 05/10/17(月) 15:18 お礼[未読]

【6485】複数テーブルのデータ集計
質問  チリ子  - 05/10/14(金) 13:40 -

引用なし
パスワード
   こんにちは。
非常にややこしい依頼があり、困っています。
内容は、、、、

以下のようなテーブル複数あります。
テーブル名:0504     テーブル名:0505     テーブル名:0506
No    区分       No    区分       No    区分  
1000   1        1000    2       1000   2
1001   2        1001    2       1001   1
1003   2        1003    1       1003   2

このテーブルのNo別に区分の同じ数字のものをカウントして表示させたいのです。
No1003の場合は2−1−2と区分が変わっています。その変わった段階で区切りたい
のです。
結果は、、、、
No=1000       No=1001       No=1003
区分  カウント   区分  カウント   区分  カウント 
1    1      2    2      2    1
2    2      1    1      1    1
                      2    1
結果の表示方法は何でもかまいません。
このような依頼を受けて、どうやっていいものかピンとこず、困っています。
何かよい方法をご存知の方はご教授お願致します。

【6488】Re:複数テーブルのデータ集計
回答  てっちゃん  - 05/10/14(金) 15:06 -

引用なし
パスワード
   ▼チリ子 さん:
こんにちは。

まず、標準モジュールに次のコードをコピペして下さい。
'-----------------------------------------------------------
Function fxMakeGroup(ByVal inNo As Long, inTB As String, ByVal in区分 As Long) As String
  Static myGname As String
  Static myNum As Long
  Static myKUBUN As Long
  
  If myNum <> inNo Or myKUBUN <> in区分 Then
    myGname = CStr(inNo) & inTB
  End If
  
  myNum = inNo
  myKUBUN = in区分
  
  fxMakeGroup = myGname
End Function
'-----------------------------------------------------------

次にクエリーにて、以下をSQLにコピペして下さい。
SELECT UQ2.[No], UQ2.区分, Count(UQ2.区分) AS カウント
FROM (SELECT UQ.*
   FROM (SELECT [No], "0504" AS TB, 区分 FROM [0504]
      UNION
      SELECT [No], "0505" AS TB, 区分 FROM [0505]
      UNION
      SELECT [No], "0506" AS TB, 区分 FROM [0506]
      ) AS UQ
   ORDER BY [No], TB) AS UQ2
GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分]);

(ちなみに、フィールド[No]と[区分]は、数値型と想定しています。)

クエリーを実行してみてください。

以上です。


もうちょっと簡単な方法があるかもしれませんが、
とりあえず、参考までに。

【6490】Re:複数テーブルのデータ集計
質問  チリ子  - 05/10/14(金) 16:25 -

引用なし
パスワード
   ▼てっちゃん さん:
お返事ありがとうございます。
早速試してみましたが、
   FROM (SELECT [No], "0504" AS TB, 区分 FROM [0504]
      UNION
      SELECT [No], "0505" AS TB, 区分 FROM [0505]
      UNION
      SELECT [No], "0506" AS TB, 区分 FROM [0506]
の構文エラーになってしまいます。
どうしてでしょうか?
このクエリはユニオンクエリというものなのでしょうか?

>(ちなみに、フィールド[No]と[区分]は、数値型と想定しています。)
数値型です。

【6494】Re:複数テーブルのデータ集計
回答  てっちゃん  - 05/10/14(金) 17:03 -

引用なし
パスワード
   ▼チリ子 さん:
失礼しました。
見やすくするつもりで、入れたスペースが全角になっていたようです。
半角にする、または、削除すればOKです。

以下に半角にしたものを載せよう、かと思って何度か試したけど、
全角に変わってしまうようですね。

ちょっと見難いですが、スペースを取りました。これでいけると思います。

SELECT UQ2.[No], UQ2.区分, Count(UQ2.区分) AS カウント
FROM (SELECT UQ.*
FROM (SELECT [No], "0504" AS TB, 区分 FROM [0504]
UNION
SELECT [No], "0505" AS TB, 区分 FROM [0505]
UNION
SELECT [No], "0506" AS TB, 区分 FROM [0506]
) AS UQ
ORDER BY [No], TB) AS UQ2
GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分]);


>このクエリはユニオンクエリというものなのでしょうか?
はい。ユニオンクエリです。
ユニオンクエリ UQ を並べ替えたものを UQ2 とし、
それに、グループ化する自作関数を加味させました。

【6495】Re:複数テーブルのデータ集計
回答  てっちゃん  - 05/10/14(金) 18:02 -

引用なし
パスワード
   ▼チリ子 さん:
ちょっと試していたら、並び順がすこしずれるかもしれませんね。
なので、
クエリに
〜略〜
> GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分]);
GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分])
ORDER BY fxMakeGroup([No],[TB],[区分]);
と、並べ替えを追加して下さい。(';'も最後へ)

【6508】Re:複数テーブルのデータ集計
質問  チリ子  - 05/10/17(月) 10:52 -

引用なし
パスワード
   ▼てっちゃん さん:
お返事が大変遅くなり申し訳ありません。

クエリを実行させると、式に未定義関数'fxMakeGroup'があります。というエラーがでます。'fxMakeGroup'というのは、標準モジュールの名前という判断でいいのでしょうか。

>>GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分])
この部分を下の内容に変更すると、、
>GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分])
>ORDER BY fxMakeGroup([No],[TB],[区分]);
構文エラーになってしまいます。

何度もすみませんが、ご教授宜しくお願致します。

【6509】Re:複数テーブルのデータ集計
回答  てっちゃん  - 05/10/17(月) 11:59 -

引用なし
パスワード
   ▼チリ子 さん:
> クエリを実行させると、式に未定義関数'fxMakeGroup'があります。
> というエラーがでます。'fxMakeGroup'というのは、
> 標準モジュールの名前という判断でいいのでしょうか。

'fxMakeGroup'というのは、最初の回答の
>> まず、標準モジュールに次のコードをコピペして下さい。
>> '-----------------------------------------------------------
>> Function fxMakeGroup(ByVal inNo As Long, inTB As String, 〜
      ~~~~↑~~~~~(この'プロシージャ名'を指します)

このコードを保存した標準モジュールの名前は
「Module_自作関数」とでもしておいて下さい。

そのあと、fxMakeGroupのスペルをもう一度確認してみてください。
(モジュール、クエリー、両方とも)


>>>GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分])
>この部分を下の内容に変更すると、、
>>GROUP BY UQ2.[No], UQ2.区分, fxMakeGroup([No],[TB],[区分])
>>ORDER BY fxMakeGroup([No],[TB],[区分]);
>構文エラーになってしまいます。
とりあえず変更せず、上記の事を確認してみてください。
それでうまくいったら、変更してみてください。

【6512】Re:複数テーブルのデータ集計
お礼  チリ子  - 05/10/17(月) 15:18 -

引用なし
パスワード
   ▼てっちゃん さん:

>'fxMakeGroup'というのは、最初の回答の
>>> まず、標準モジュールに次のコードをコピペして下さい。
>>> '-----------------------------------------------------------
>>> Function fxMakeGroup(ByVal inNo As Long, inTB As String, 〜
>      ~~~~↑~~~~~(この'プロシージャ名'を指します)

クエリとモジュールのfxMakeGroupとを書き直したら、クエリが実行できました!!!
カウントされて結果が表示されました☆
すごくびっくりしました。まだまだ課題がありますが、出来るということが分かり、一歩前へ進むことができました。また、分からないことがあるかもしれませんが、ここからは少し自分でやってみます!!!またご教授いただけたらうれしいです。ありがとうございました。今後もよろしくお願いします。

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