将基表值与第二张表的总和与分组依据进行比较

时间:2019-04-05 06:14:45

标签: sql sql-server group-by left-join

我有两个表:

一个是基本表,第二个是事务表。我想将基表的值与第二张表的值总和与分组依据进行比较。

Table1(T1Id,Amount1,...)

Tabe2(T2Id,T1ID,Amount2)

我希望表1中的那些行,其中表2的SUM(Amount2)的总和大于或等于表1的Amount1。

* T1ID与两个表有关 * SQL查询与其他表有许多联接以进行数据检索。

2 个答案:

答案 0 :(得分:3)

一种方法使用联接:

SELECT t1.T1Id, t1.Amount1
FROM Table1 t1
INNER JOIN Table2 t2
    ON t1.T1Id = t2.T1ID
GROUP BY
    t1.T1Id, t1.Amount1
HAVING
    SUM(t2.Amount2) >= t1.Amount1;

我们也可以尝试通过相关子查询来做到这一点:

SELECT t1.T1Id, t1.Amount1
FROM Table1 t1
WHERE t1.Amount1 <= (SELECT SUM(t2.Amount2) FROM Table2 t2
                     WHERE t1.T1Id = t2.T1ID);

答案 1 :(得分:0)

我将使用类似于以下查询的内容:

SELECT
    a.T1Id, a.Amount1, SUM(b.Amount2)
FROM Table1 a
INNER JOIN Table2 b on b.T1Id = a.T1Id
GROUP BY a.T1Id, a.Amount1
HAVING SUM(b.Amount2) >= a.Amount1;

基本上,上述查询为您提供ID,表1中的金额和表2中的总金额。查询末尾的HAVING子句会过滤掉那些记录,其中第二张表中的总金额小于从第一个开始的金额。

如果要向查询中添加更多表联接,可以通过添加任意数量的联接来实现。我建议为Table1表中要联接的每个表都提供一个引用ID。