【问题标题】:SQL Query for get a join between two tables with a multiple condional SUM() in MS AccessSQL Query 用于在 MS Access 中使用多个条件 SUM() 获取两个表之间的连接
【发布时间】:2020-04-30 01:00:54
【问题描述】:

可以在 MS ACCESS 2016 中加入一个表,该表是另一个表的多条件 SUM?

例子:

表 1 - 列

ID、姓名、总数

表 2 - 列

ID、名称、IDREF、ROOTID、CUSTO

数据:

表 1

ID | Name  | Total
---+-------+------
35 |  Test |  "SUM(CUSTO) of ALL ELEMENTS OF TABLE 2 WHERE table2.IDREF = table1.ID **or** table2.ROOTID = table1.ID"

表 2

ID | Name  | IDREF | CUSTO | ROOTID   |
---+-------+-------+-------+----------+
1  | Test  |  35   |   50  |   0      |
2  | Test  |  35   |   30  |   0      |
3  | ALFA  |  12   |   30  |   0      |
4  | BETA  |  17   |   10  |   35     |

结果应该是:

表 1

ID | Name | Total
---+------+------
35 | Test |  90  (50 + 30 from table 2 where idref = 35 and + 10 from table 2 where rootid = 35)

这与我之前的问题非常相似,但我认为在 ms-access 中很难进行多条件求和,需要一些帮助。

谢谢。

【问题讨论】:

    标签: sql database ms-access


    【解决方案1】:

    您可以使用几个子查询来获取每个查询的总数,然后将它们相加:

    SELECT T1.ID, 
    NZ((SELECT SUM(T2.Custo) FROM Table2 AS T2 WHERE T1.ID=T2.IDRef),0) +
    NZ((SELECT SUM(T2A.Custo) FROM Table2 AS T2A WHERE T1.ID=T2A.RootID) ,0) AS Total
    FROM Table1 AS T1;
    
    

    问候,

    【讨论】:

    • 谢谢!有用!而且速度非常快。我有一些问题:NZ() 函数是做什么的?它在访问中创建变量或子查询?它可以在其他数据库中使用吗?
    • 它是一个Access函数,“Null to Zero”,用于确保如果子查询没有返回任何内容,我们得到一个0。
    【解决方案2】:

    您可以使用具有多个 ON 条件的内部联接,如下所示,

    SELECT 
        t1.ID,
        t1.Name,
        SUM(t2.CUSTID) AS Total
    FROM 
        t2 
        INNER JOIN 
        t1 
    ON 
        t2.IDREF = t1.ID
        OR
        t2.ROOTID =t1.ID
    GROUP BY
        t1.ID,
        t1.NAME
    

    输出:

    ID  Name    Total
    35  Test    90
    

    【讨论】:

    • 它有效,回报是我所期望的。但就速度而言,我的“真实”表大约有 11000 行。所以这个解决方案需要 10 - 20 秒才能返回。无论如何,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多