Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 访问:计算两个联接表中的唯一记录_Sql_Ms Access - Fatal编程技术网

Sql 访问:计算两个联接表中的唯一记录

Sql 访问:计算两个联接表中的唯一记录,sql,ms-access,Sql,Ms Access,我有两张像这样的桌子: Rep Client ID # ------------------- Bob 100 Joe 200 Joe 201 Dave 300 Dave 301 Rep Client ID # ---------------- Jack 100 Joe 200 Joe 400 Dave 300 Dave 500 我需要做两件事: 计算每个表中分配给每个代表的客户机(ID#)数量。对于表1,

我有两张像这样的桌子:

Rep     Client ID #
-------------------
Bob     100
Joe     200
Joe     201
Dave    300
Dave    301

Rep     Client ID #
----------------
Jack    100
Joe     200
Joe     400
Dave    300
Dave    500
我需要做两件事:

  • 计算每个表中分配给每个代表的客户机(ID#)数量。对于表1,鲍勃有1个,乔有2个,戴夫有2个

  • 计算两个表中每个代表拥有的唯一客户端总数。在上面的例子中,鲍勃有1个,乔有3个,戴夫有3个,杰克有1个


  • 我该怎么做?

    您需要一个
    分组依据
    /
    总计
    查询。对于您的第一个要求

    SELECT 
        Rep,
        Count(ClientID) As CountOfID
    FROM
        Table1
    GROUP BY 
        Rep;
    
    你的第二个要求。你需要与GROUP BY建立联盟

    SELECT 
        TmpQ.Rep,
        Count(TmpQ.ClientID) As CountOfID
    FROM
        (
            SELECT
                Table1.Rep,
                Table1.ClientID
            FROM 
                Table1
            GROUP BY 
                Table1.Rep,
                Table1.ClientID
            UNION
            SELECT
                Table2.Rep,
                Table2.ClientID
            FROM 
                Table2
            GROUP BY 
                Table2.Rep,
                Table2.ClientID
        ) As TmpQ
    GROUP BY 
        TmpQ.Rep;
    

    要获取每个表中每个代表的不同ClientID数,可以使用:

    SELECT
        sourcetable,
        rep,
        count(clientid)
    FROM    
        (
            SELECT
                "table 1" as [sourcetable],
                rep,
                clientid
            FROM 
                table1
            GROUP BY 1,2,3
        )
    UNION ALL
    SELECT
        sourcetable,
        rep,
        count(clientid)
    FROM    
        (
            SELECT
                "table 2" as [sourcetable],
                rep,
                clientid
            FROM 
                table2
            GROUP BY 1,2,3
        )
    
    要仅获取每个代表的不同ClientID的计数,而不考虑表,请执行以下操作:

    SELECT
        rep,
        count(clientid)
    FROM
        (
            SELECT rep,clientid FROM table1
            UNION
            SELECT rep,clientid FROM table2
        )
    GROUP BY 1
    

    非常感谢。这与下面JNevill的回答非常相似。对于第二个要求,在使用union的内部查询中,我不需要以某种方式丢弃重复项吗?工会只是将这两个查询附加在一起,不是吗?如果在分配给同一代表的两个表中都有相同的客户机ID,我应该只计算一次。我该怎么做?UNION,在将两个表合并为一个表时忽略两个表中的副本。因此,表1中存在的内容,如果在表2中再次出现,则不包括在内。因此,TmpQ中只有唯一的值。因此,当您运行我的查询时,您将获得正确的计数。