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
Ms access 无重复计数的访问连接_Ms Access - Fatal编程技术网

Ms access 无重复计数的访问连接

Ms access 无重复计数的访问连接,ms-access,Ms Access,我有两张桌子。一个按季度递增,另一个按年度递增。我想加入这两个组织,计算费用和计数,不要重复计算 Table 1 CLM_NUM Year Quarter FEES 1234 2016 1 100 1234 2016 2 100 1234 2016 3 100 1234 2016 4 100 Table 2 CLM_NUM Year COUNT

我有两张桌子。一个按季度递增,另一个按年度递增。我想加入这两个组织,计算费用和计数,不要重复计算

Table 1         
CLM_NUM Year    Quarter FEES
1234    2016    1       100
1234    2016    2       100
1234    2016    3       100
1234    2016    4       100

Table 2         
CLM_NUM Year    COUNT   
1234    2016    10  

Desired Result:         
CLM_NUM Year    FEES    COUNT
1234    2016    400     10
    SELECT Table1.CLM_NUM, Table1.YEAR, Sum(Table1.FEES) AS SumOfFEES, 
    Sum(Table2.COUNT) AS SumOfCOUNT
    FROM Table1 INNER JOIN Table2 ON (Table1.CLM_NUM = Table2.CLM_NUM) AND  (Table1.YEAR = Table2.YEAR) 
    GROUP BY Table1.CLM_NUM, Table1.YEAR;
但是,我的查询将计数四次,结果是40次,而不是10次。
我如何解决这个问题

    SELECT Table1.CLM_NUM, Table1.YEAR, Sum(Table1.FEES) AS SumOfFEES, 
    Sum(Table2.COUNT) AS SumOfCOUNT
    FROM Table1 INNER JOIN Table2 ON (Table1.CLM_NUM = Table2.CLM_NUM) AND  (Table1.YEAR = Table2.YEAR) 
    GROUP BY Table1.CLM_NUM, Table1.YEAR;

如果access没有max,请先使用

    SELECT Table1.CLM_NUM, Table1.YEAR, Sum(Table1.FEES) AS SumOfFEES, 
    Sum(Table2.COUNT) AS SumOfCOUNT
    FROM Table1 INNER JOIN Table2 ON (Table1.CLM_NUM = Table2.CLM_NUM) AND  (Table1.YEAR = Table2.YEAR) 
    GROUP BY Table1.CLM_NUM, Table1.YEAR;

您可以使用子查询。子查询中的总和意味着即使表2不是每年一次(即每个CLM_NUM/Year键有更多行),它也可以工作

    SELECT Table1.CLM_NUM, Table1.YEAR, Sum(Table1.FEES) AS SumOfFEES, 
    Sum(Table2.COUNT) AS SumOfCOUNT
    FROM Table1 INNER JOIN Table2 ON (Table1.CLM_NUM = Table2.CLM_NUM) AND  (Table1.YEAR = Table2.YEAR) 
    GROUP BY Table1.CLM_NUM, Table1.YEAR;

表2中是否有多个列具有相同的CLM_NUM?表2中只有一个名为CLM_NUM的字段。您是指行吗?表2有一行每CLM_NUM和年份组合。是的,对不起,我指的是行。您希望每个CLM_NUM有一个结果还是每个CLM_NUM/年有一个结果?每个CLM_NUM/年。感谢您的回复。我相信这个解决方案是可行的,因为在表2中,每个clm_num和年份只有一行。例如,如果表2是两年一次的,我不能简单地取最大值,那么是否有更普遍的解决方案?我可以分别将每个表汇总到每个声明的一行,然后进行连接,但我想知道是否有一种简单的方法可以在一个查询中完成所有操作。谢谢您的团队仍然是按clm_num和。年计算表2的最大值,这是该关系的唯一记录1。如果你真的想解决这个问题,可以使用一个在线数据库,我们可以一起工作,插入你能看到的所有数据,我们可以测试和处理这些数据。这是一个完整的查询。max只在不同的记录上执行,所以它不会执行你想象的max。除非我模拟的数据会有所不同。请使用sqlfiddle.com模拟您的数据,以便用户能够充分回答您的问题,仅供参考,以上在我之后回答的sql用户也是正确的,假设您的数据是正确的谢谢!成功了。快速提问:如果我想对表2中的多个字段求和,我需要执行多个子例程,还是可以将多个字段添加到子例程中的select语句中?我尝试了后一种方法,但对我来说不起作用,但当我将select限制为单个字段时,它起了作用。我编写的子查询不能返回多个列。如果要聚合第二个表中的多个列,可以加入“子查询”,从中可以选择多个聚合值(例如sum(t2.Count)、sum(t2.SomethingElse))。另一种方法是对要聚合的每一列重复子查询,但对于大型数据集,它可能无法很好地执行。