如何在不使用SQL Server / MS Access的所有选定列的情况下进行分组和求和?

时间:2018-01-11 16:21:10

标签: sql sql-server ms-access group-by ms-access-2010

SQL新手在这里......

以下是MS Access中名为TEST的表格示例:

save()

在我的查询中,我试图仅按EFF_DATE和BATCH求和,并排除TRANS_AMT总和等于0。

所以我的查询结果应该如下:

EFF_DATE   BATCH   ENTITY ACCOUNT  TRANS_AMT
12/1/2017  TEST A  110    165105   (10.00)
12/1/2017  TEST A  120    278910    10.00 
12/1/2017  TEST A  110    165105   (10.00)
12/1/2017  TEST A  120    165135    10.00 
12/2/2017  TEST B  120    165135    15.00 
12/2/2017  TEST B  110    278910   (10.00)

我尝试过以下查询:

EFF_DATE   BATCH   ENTITY  ACCOUNT  TRANS_AMT
12/2/2017  TEST B  120     165135   15.00 
12/2/2017  TEST B  110     278910  (10.00)

我收到以下错误:

“您尝试执行的查询不包含指定表达式'ENTITY'作为聚合函数的一部分。”

当我用Google搜索错误时,我找不到任何信息,除了声明其他列应该添加到GROUP BY子句但是如果我添加它们,那么按日期和批处理总和为零的事务将继续出现。关于我能做些什么来获得理想结果的任何想法?

谢谢, 丹

2 个答案:

答案 0 :(得分:1)

修改GROUP BY并包含ENTITY和ACCOUNT

GROUP BY TEST.EFF_DATE, TEST.BATCH, ENTITY, ACCOUNT

答案 1 :(得分:0)

当您在分组的select语句中使用某些内容时,它需要位于分组中。

但是,您可以执行此嵌套。

您可以使用所有有效日期/批次组合并且不为零。

然后只选择与他们有关的外部记录。

SELECT * FROM TEST A
WHERE (A.EFF_DATE, A.BATCH) IN
(
    SELECT B.EFF_DATE, B.BATCH
    FROM TEST B
    GROUP BY B.EFF_DATE, B.BATCH
    HAVING Sum(B.TRANS_AMT)<>0
)