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
我需要做两件事:
我该怎么做?您需要一个
分组依据
/总计
查询。对于您的第一个要求
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中只有唯一的值。因此,当您运行我的查询时,您将获得正确的计数。