Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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,我有两个数据库,我想比较一个案例出现的次数 表1: 表2: 现在,对于这个例子,我试图得到这个结果: ID Table1 Table2 A2D 3 2 A3D 1 2 我尝试过这些代码,但没有成功: SELECT R1.ID as ID, COUNT(R1.ID) as Table1, COUNT(R2.ID) as Table2 FROM TAB1 AS R1, TAB2 AS R2 WHERE R1.ID = R

我有两个数据库,我想比较一个案例出现的次数

表1:

表2:

现在,对于这个例子,我试图得到这个结果:

ID     Table1       Table2
A2D    3            2
A3D    1            2
我尝试过这些代码,但没有成功:

SELECT R1.ID as ID, COUNT(R1.ID) as Table1, 
COUNT(R2.ID) as Table2
FROM TAB1 AS R1, TAB2 AS R2
WHERE R1.ID = R2.ID
GROUP BY R1.ID
这个给了我错误的计算值

此外,这一个只是崩溃:

select 
    ( 
     select count(*) as Table1
     from TAB1
     where ID = R1.ID
    ),(
      select count(*) as Table2
      from TAB2
      where ID= R1.ID
     )
FROM TAB1 AS R1
正如您所看到的,我正在尝试使我的标准动态化。我发现的大多数示例都包括基本的硬编码标准。但对于我的情况,我希望查询查看我的第一个表ID,计算它出现的时间,对具有相同ID的第二个表执行该操作,然后转到下一个ID

如果我的问题缺乏信息或令人困惑,请直接问我,我会尽我所能做到更准确


提前谢谢

这里我使用一个UNION ALL作为子查询

SELECT ID, SUM(T1) AS Table1, SUM(T2) AS Table2
FROM
    (SELECT ID, COUNT(ID) AS T1,         0 AS T2 FROM TAB1 GROUP BY ID
     UNION ALL
     SELECT ID,         0 AS T1, COUNT(ID) AS T2 FROM TAB2 GROUP BY ID)
GROUP BY ID
HAVING SUM(T1)>0 AND SUM(T2)>0

不确定我是否理解您的问题,但您可以尝试以下方式:

SELECT DISTINCT t.ID, 
       (SELECT COUNT(ID) FROM R1 WHERE ID = t.ID) AS table1,
       (SELECT COUNT(ID) FROM R2 WHERE ID = t.ID) AS table2
FROM table1 t

我使用了不同的方法,但不幸的是我不得不使用两个查询,我仍然不知道它们是否可以组合在一起。第一种方法仅用于对两个表求和,并合并结果:

SELECT "Tab1" AS [Table], Tab1.ID, Count(*) AS Total
FROM Tab1
GROUP BY "Tab1", Tab1.ID
UNION SELECT "Tab2" AS [Table], Tab2.ID, Count(*) AS Total
FROM Tab2
GROUP BY "Tab2", Tab2.ID
而且,由于Access支持透视查询,因此您可以使用:

TRANSFORM Sum(qrySums.[Total]) AS Total
SELECT qrySums.[ID]
FROM qrySums
GROUP BY qrySums.[ID]
PIVOT qrySums.[Table];

为了获得所需的结果,我将其分解为两个子查询(R1SQ和R2SQ)和一个主联合查询(R1R2),该查询使用内部、左侧和右侧联接来包括所有行条目,包括未出现在两个表中的行:

R1SQ

SELECT R1.Builder, Count(R1.Builder) AS Table1
FROM R1
GROUP BY R1.Builder;
SELECT R2.Builder_E, Count(R2.Builder_E) AS Table2
FROM R2
GROUP BY R2.Builder_E;
R2SQ

SELECT R1.Builder, Count(R1.Builder) AS Table1
FROM R1
GROUP BY R1.Builder;
SELECT R2.Builder_E, Count(R2.Builder_E) AS Table2
FROM R2
GROUP BY R2.Builder_E;
R1R2

SELECT R1SQ.Builder, R1SQ.Table1, R2SQ.Table2
FROM R1SQ INNER JOIN R2SQ ON R1SQ.Builder = R2SQ.Builder_E
UNION
SELECT R1SQ.Builder, R1SQ.Table1, 0 AS Table2
FROM R1SQ LEFT JOIN R2SQ ON R1SQ.Builder = R2SQ.Builder_E
WHERE (((R2SQ.Builder_E) Is Null))
UNION
SELECT R2SQ.Builder_E, 0 AS Table1, R2SQ.Table2
FROM R1SQ RIGHT JOIN R2SQ ON R1SQ.Builder = R2SQ.Builder_E
WHERE (((R1SQ.Builder) Is Null))
ORDER BY R1SQ.Builder;

R1和R2是什么?桌子?我在两个表定义中都没有将“Builder”视为字段。这些表也在不同的数据库中吗?或者它们都在同一个数据库中?您必须澄清您的问题,以便我们提供真正的帮助。对不起,出于保密目的,我不得不更改我的表和字段名称以及数据。生成器是我的示例中的“ID”,我将进行更正。这两个表都在同一个Access数据库中。当我查看我的测试用例时,我得到了正确的结果,但是我收到的结果是51k,而不是我需要的表1中的30.7k。如果没有看到表,我无法知道发生了什么。我建议您只查询
TAB1
,看看会发生什么<代码>选择ID,从TAB1 GROUP BY ID中将(ID)计数为T1。这将返回TAB1的正确结果。但是需要注意的是,TAB1有30.7k的数据,而TAB2有53k的数据。我只需要得到TAB1和TAB2I中的记录的计数,我添加了HAVING子句,过滤掉TAB1或TAB2中没有条目的记录。注意:HAVING在分组后计算,而WHERE在分组前计算。不确定在这样的查询中这是否重要。你能详细说明一下吗?如果数据有4个序列,但命名为1,2,6,7,我想知道有4个序列。但是,您的查询将返回7Ahhh。你的问题有点让人困惑。我以为你想要两张桌子上的max。我将编辑我的答案。这实际上与您的一个查询非常相似。你的版本的问题(我认为)是你没有命名你的子选择。我认为这个解决方案看起来不错!这里唯一的问题是,如果表2包含一些表1中不存在的ID(我不知道是否会发生这种情况),那么这些ID的总和将不会出现