1

私は Access 2010 の初心者ではありませんが、専門家ではありません。私は日常的に Access を使用していますが、この問題に悩まされています。

グループ、サブグループ、および可能なすべてのサブメンバーのセットを取得するためにクエリを実行する必要があるテーブルがあります。テーブルは次のように配置されます。

希望するグループ | 現在のTN | スプリントの電話番号 | 姓 | 名5553215255
| 5553210001 | 4143210009 | 堰ボブ
5553215255 | 5553210002 | 4143210008 | ガルシア・ジェリー
5553215255 |5553210003 | 4143210007 | ヘンドリックス ジミ
5553215255 | 5553210004 | 4143210006 | ペッド ページ
5553210004 | 3144230009 | 4143210005 | 現金ジョニー
5553210004 | 3144230008 | 4143210003 | モリソン ジム
5553210004 | 3144230007 | 4143210002 |ベートーヴェン・ルートヴィヒ
5553210004 | 3144230911 | 4143210001 | 緊急ペッド ページ
3144230911 | 6362341101 | 4143210099 |ストラマー・ジョー
3144230911 | 6362341101 | 4143210098 | マーキュリー・フレディ
3144230911 | 6362341101 | 4143210097 |プレスリー・エルヴィス
3144230911 | 6362341101 | 4143210096 | ボッパービッグ

定義されたフィールド:

  • 目的のグループ: 役割またはその他の基準に基づく人々のグループ。この番号を呼び出すと、特定のグループのメンバーにページが送信されます。
  • 現在の TN: 特定のメンバーの電話。メンバーは個人または目的のグループにすることができます
  • Sprint の電話番号: ポケットベルを Sprint の電話に置き換える人もいます。
  • 姓: 個人の役割または姓。場合によってはグループ名など。
  • 名: 人の名前

実行時にページングされたすべてのグループのすべてのメンバーのリストを返すクエリが必要です。医師にページを送るとします。Paging Doctors はまた、Peds のすべてのメンバーをページングし、Emergency Peds のすべてのメンバーをページングします。結果として、Doctors のすべてのメンバー、Peds のすべてのメンバー (グループ名を除く)、および結果としてページングされた Emergency Peds のすべてのメンバーが表示されます。最初のページの。Peds ページと Emergency Peds ページが除外されたことに注意してください。ここに示されています:

希望するグループ | 現在のTN | スプリントの電話番号 | 姓 | 名5553215255
| 5553210001 | 4143210009 | 堰ボブ
5553215255 | 5553210002 | 4143210008 | ガルシア・ジェリー
5553215255 |5553210003 | 4143210007 | ヘンドリックス ジミ
5553210004 | 3144230009 | 4143210005 | 現金ジョニー
5553210004 | 3144230008 | 4143210003 | モリソン ジム
5553210004 | 3144230007 | 4143210002 |ベートーヴェン・ルートヴィヒ
3144230911 | 6362341101 | 4143210099 |ストラマー・ジョー
3144230911 | 6362341101 | 4143210098 | マーキュリー・フレディ
3144230911 | 6362341101 | 4143210097 |プレスリー・エルヴィス
3144230911 | 6362341101 | 4143210096 | ボッパービッグ

  1. ある同僚は、手動で複数回クエリを実行し、結果を複数のテーブルに保存してから、結果のすべてのテーブルを 1 つのテーブルに追加することを提案しています。どうすればいいですか?これは私のレベルでは簡単に理解できる解決策のようですが、うまく理解できていません。
  2. 上記の解決策以外に別の方法はありますか?
  3. 2 番目の同様のテーブルを最初のテーブルと比較する場合、他に知っておくべきことはありますか? 2 番目の MEMBERS は、1 番目の GROUP LEADS である可能性があります。

MIGHTY BIG よろしくお願いします。


コメントから sql を含めるように編集します。

SELECT * 
FROM   (SELECT tbl_group_build.[desired group],tbl_group_build.[current tn], 
                   tbl_group_build.[sprint telephone number], 
                   tbl_group_build.[last name], 
                   tbl_group_build.[first name] 
    FROM   tbl_group_build 
    UNION 
    SELECT tbl_Group_build_1.[desired group],tbl_Group_build_1.[current tn], 
           tbl_Group_build_1.[sprint telephone number], 
           tbl_Group_build_1.[last name],tbl_Group_build_1.[first name] 
    FROM   tbl_group_build 
           INNER JOIN tbl_group_build AS tbl_Group_build_1 
                   ON tbl_group_build.[current tn] = 
                      tbl_Group_build_1.[desired group] 
    UNION 
    SELECT tbl_Group_build_2.[desired group],tbl_Group_build_2.[current tn], 
           tbl_Group_build_2.[sprint telephone number], 
           tbl_Group_build_2.[last name],tbl_Group_build_2.[first name] 
    FROM   (tbl_group_build 
            INNER JOIN tbl_group_build AS tbl_Group_build_1 
                    ON tbl_group_build.[current tn] = 
                       tbl_Group_build_1.[desired group]) 
           INNER JOIN tbl_group_build AS tbl_Group_build_2 
                   ON tbl_Group_build_1.[current tn] = 
                      tbl_Group_build_2.[desired group]) g 
4

1 に答える 1

3

これがアイデアの始まりです。サンプルデータでは、グループリードの電話番号がページの電話番号と同じであることに気づきました。他の可能な結合もありますが、これははるかにクリーンです。

SELECT * 
FROM   (SELECT groups.group_name, 
               groups.[group_lead member], 
               groups.tn, 
               groups.last_name, 
               groups.first_name 
        FROM   groups 
        WHERE  groups.group_name = [enter page] 
        UNION 
        SELECT Groups_1.group_name, 
               Groups_1.[group_lead member], 
               Groups_1.tn, 
               Groups_1.last_name, 
               Groups_1.first_name 
        FROM   groups 
               INNER JOIN groups AS Groups_1 
                       ON groups.tn = Groups_1.[group_lead member] 
        UNION 
        SELECT Groups_2.group_name, 
               Groups_2.[group_lead member], 
               Groups_2.tn, 
               Groups_2.last_name, 
               Groups_2.first_name 
        FROM   (groups 
                INNER JOIN groups AS Groups_1 
                        ON groups.tn = Groups_1.[group_lead member]) 
               INNER JOIN groups AS Groups_2 
                       ON Groups_1.tn = Groups_2.[group_lead member]) g 
WHERE  Trim(Replace([last_name], "page", "")) 
       NOT IN (SELECT DISTINCT group_name FROM groups) 

新しいデータ

SELECT * 
FROM   (SELECT groups.[desired group],groups.[current tn], 
                       groups.[sprint telephone number], 
                       groups.[last name],groups.[first name] 
        FROM   groups 
        WHERE  groups.[desired group] = [enter desired group] 
        UNION 
        SELECT Groups_1.[desired group],Groups_1.[current tn], 
               Groups_1.[sprint telephone number],Groups_1.[last name], 
               Groups_1.[first name] 
        FROM   groups 
               INNER JOIN groups AS Groups_1 
                       ON groups.[current tn] = Groups_1.[desired group] 
        UNION 
        SELECT Groups_2.[desired group],Groups_2.[current tn], 
               Groups_2.[sprint telephone number],Groups_2.[last name], 
               Groups_2.[first name] 
        FROM   (groups 
                INNER JOIN groups AS Groups_1 
                        ON groups.[current tn] = Groups_1.[desired group]) 
               INNER JOIN groups AS Groups_2 
                       ON Groups_1.[current tn] = Groups_2.[desired group]) AS g 
WHERE  g.[last name] NOT IN (SELECT [last name] 
                                    FROM   groups 
                                    WHERE  [current tn] IN (SELECT DISTINCT 
                                                           [desired group] 
                                                            FROM   groups))  
于 2012-08-22T09:15:55.983 に答える