1

我不仅仅是 Access 2010 的新手,但肯定不是专家。我每天都在使用 Access,但这个问题让我很困惑。

我有一张表需要查询以检索一组组、子组和所有可能的子成员。该表的布局如下:

所需组 | 当前田纳西州 | 冲刺电话号码 | 姓氏 | 名字
5553215255 | 5553210001 | 4143210009 | 威尔鲍勃
5553215255 | 5553210002 | 4143210008 | 加西亚·杰瑞
5553215255 |5553210003 | 4143210007 | 亨德里克斯吉米
5553215255 | 5553210004 | 4143210006 | Peds 页面
5553210004 | 3144230009 | 4143210005 | 现金强尼
5553210004 | 3144230008 | 4143210003 | 莫里森吉姆
5553210004 | 3144230007 | 4143210002 |
贝多芬路德维希 5553210004 | 3144230911 | 4143210001 | 急救人员页面
3144230911 | 6362341101 | 4143210099 |弹奏者乔
3144230911 | 6362341101 | 4143210098 | 水星房地美
3144230911 | 6362341101 | 4143210097 |普雷斯利·埃尔维斯
3144230911 | 6362341101 | 4143210096 | 波普大

定义的字段:

  • Desired GROUP:基于角色或其他标准的一组人。寻呼时,此号码将向给定组的成员发送寻呼。
  • 当前 TN:给定成员的电话。成员可以是一个人或一个 Desired GROUP
  • Sprint 电话号码:有些人会用 Sprint 电话替换他们的寻呼机。
  • 姓氏:一个人的角色或姓氏。有时是组名或类似名称。
  • 名字:一个人的名字

我需要一个查询,在运行时返回所有分页组的所有成员的列表。假设我向医生发送页面。寻呼医生还寻呼 Peds 的所有成员,这反过来又寻呼紧急 Peds 的所有成员结果将显示所有医生成员、所有 Peds 成员(除组名)和所有被寻呼的紧急 Peds 成员的初始页面。注意 Peds Page 和 Emergency Peds Page 被排除在外。此处图解:

所需组 | 当前田纳西州 | 冲刺电话号码 | 姓氏 | 名字
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. 一位同事建议手动查询多次,将结果保存到多个表中,然后将所有结果表附加到一个表中。我该怎么做呢?看来这是我在我的水平上很容易理解的解决方案,但我不太明白,尽我所能。
  2. 除了上述解决方案还有其他方法吗?
  3. 如果我将第二个类似的表格与第一个进行比较,我还有什么需要知道的吗?第二个成员可能是第一个中的组领导。

提前非常感谢。


编辑以包含评论中的 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 回答