Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Access 2013)
親子のグループCDでの絞込み
投稿日時: 18/02/08 16:50:05
投稿者: hato

お世話になります。
グループCDをコンボで一覧にして、それを条件にして
実績を集計した結果を出力しようとしています。
 
グループがツリー上になっています。
190000
       |------191000 グループA
                     |------191100 グループA1
                     |------191200 グループA2
                     |------191300 グループA3
       |------192000 グループB
 
グループMの内容をコンボにすることはできたのですが、
グループAなど親が選択された場合、実績を絞りこむことができません。
実績の持ち方を変える必要がありそうな気がするのですが
親と子のどちらのグループCDでも抽出するには、どうしたら
いいでしょうか?
何かヒントでも結構ですので、どうぞよろしくお願いします。
 
★グループM
グループCD    グループ名    親グループCD    最下層FLG
 191000     グループA     190000         0
 191100     グループA1     191000         1
 191200     グループA2     191000         1
 191300     グループA3     191000         1
 192000     グループB     190000         1
   
 ★実績
 年月     商品CD     得意先CD     数量     グループCD
 201801 0001     100         5     191100
 201801 0001     121         10     191100
 201801 0001     151         10     191200
 201801 0001     161         7     192000
    
 
 

回答
投稿日時: 18/02/08 18:13:31
投稿者: sk

引用:
グループがツリー上になっています。
190000
       |------191000 グループA
                     |------191100 グループA1
                     |------191200 グループA2
                     |------191300 グループA3
       |------192000 グループB

・ツリー全体の階層数(世代数)の上限は何階層(世代)までなのか。
 (あるいは上限がないのか)
 
・ノードによって最下層までの階層数(世代数)が異なる場合もあるのか。

投稿日時: 18/02/09 08:37:51
投稿者: hato

返信ありがとうございます。
説明不足ですいませんでした。
 
ツリーは第3世代までですが、最初の第1世代というのか
190000の部分はグループMでは管理していません。
コンボで選択するグループCDは第2・3世代のグループCDです。
 
最下層の階層数はノードによって異なります。
 
どうぞよろしくお願いします。
 
 

回答
投稿日時: 18/02/09 10:01:17
投稿者: sk

引用:
ツリーは第3世代まで

引用:
コンボで選択するグループCDは第2・3世代のグループCDです。

とりあえず[グループCD]のデータ型が
テキスト型であると仮定した場合。
 
1. フォームのレコードソースとして
   以下のような選択クエリを設定する。
 
( SQL ビュー)
-----------------------------------------------------------
SELECT [実績].[年月],
       [実績].[商品CD],
       [実績].[得意先CD],
       [実績].[数量],
       [実績].[グループCD],
       [グループM].[親グループCD]
FROM [実績]
LEFT JOIN [グループM]
ON [実績].[グループCD] = [グループM].[グループCD];
-----------------------------------------------------------
 
2. [グループM]を値集合ソースとする非連結コンボボックスを
   フォームヘッダー辺りに配置する。
 
3. フォームモジュールに以下のようなコードを記述する。
 
(フォームモジュール)
-----------------------------------------------------------
Private Sub コンボボックス名_Click()
 
    Dim strCriteria As String
     
    With Me
         
        strCriteria = ""
         
        If Nz(![コンボボックス名], "") <> "" Then
            strCriteria = "'" & ![コンボボックス名] & "' In([グループCD],[親グループCD])"
        End If
         
        .Filter = strCriteria
        .FilterOn = (strCriteria <> "")
         
    End With
 
End Sub
-----------------------------------------------------------
(コンボボックス名は適宜修正すること)

投稿日時: 18/02/09 11:13:56
投稿者: hato

skさんありがとうございます。
 
'191100' In([グループCD],[親グループCD])"
こんな書き方がいけるんですね。うまくいきました!!
SQLでも使えたのでいろいろやりたいことができそうです。
本当にありがとうございました!