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

Posted

技术标签:

【中文标题】如何在不使用 SQL Server/MS Access 的所有选定列的情况下进行分组和求和?【英文标题】:How can I group by and sum without using all selected columns using SQL Server/MS Access? 【发布时间】:2018-01-11 16:21:10 【问题描述】:

这里是 SQL 新手...

这是我在 MS Access 中名为 TEST 的表的示例:

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 求和,并排除等于 0 的 TRANS_AMT 总和。

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

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)

我尝试了以下查询:

SELECT 
EFF_DATE, 
BATCH, 
ENTITY, 
ACCOUNT, 
Sum(TRANS_AMT) 
FROM TEST
WHERE ACCOUNT in ("165105","278910","165135")
AND ENTITY in ("120","110")
GROUP BY TEST.EFF_DATE, TEST.BATCH
HAVING (((Sum(TRANS_AMT))<>0));

我收到以下错误:

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

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

谢谢, 丹

【问题讨论】:

【参考方案1】:

修改您的 GROUP BY 并包括 ENTITY 和 ACCOUNT

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

【讨论】:

【参考方案2】:

当你在分组选择语句中使用某些东西时,它需要在 group by 中。

但是,您可以进行这种嵌套。

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

然后只选择与它们相关的外部记录。

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
)

【讨论】:

以上是关于如何在不使用 SQL Server/MS Access 的所有选定列的情况下进行分组和求和?的主要内容,如果未能解决你的问题,请参考以下文章

服务器主体无法访问 SQL Server MS 2012 中当前安全上下文下的数据库

我们如何从 ACCE 调试批量操作 javascript?

如何在不使用 SQL 中的 PIVOT 函数的情况下进行透视?

SQL:如何在不使用 rank() 的情况下理解解决方案代码?

如何在不使用数据透视和反透视的情况下在 SQL Server 中水平显示数据?

如何在不使用 PDO 或 PHP 应用程序绑定的情况下解决二阶 SQL 注入