如何使用 SQL Server/MS Access 在不使用所有选定列的情况下进行分组和求和?
How can I group by and sum without using all selected columns using SQL Server/MS Access?
SQL这里是新手...
这是我在 MS Access 中名为 TEST 的 table 示例:
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));
我收到以下错误:
"You tried to execute a query that does not include the specified expression 'ENTITY' as part of an aggregate function."
当我用谷歌搜索这个错误时,除了说明其他列应该添加到 GROUP BY 子句之外,我找不到任何信息,但是如果我添加它们,那么按日期和批次总和应该为零的交易继续出现。关于如何获得预期结果有什么想法吗?
谢谢,
旦
修改 GROUP BY 并包括 ENTITY 和 ACCOUNT
GROUP BY TEST.EFF_DATE, TEST.BATCH, ENTITY, ACCOUNT
当您在分组 select 语句中使用某些内容时,它需要在分组依据中。
但是,您可以进行这种嵌套。
您可以使用所有有效的 date/batch 组合并且不为零。
然后只有 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
)
SQL这里是新手...
这是我在 MS Access 中名为 TEST 的 table 示例:
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));
我收到以下错误:
"You tried to execute a query that does not include the specified expression 'ENTITY' as part of an aggregate function."
当我用谷歌搜索这个错误时,除了说明其他列应该添加到 GROUP BY 子句之外,我找不到任何信息,但是如果我添加它们,那么按日期和批次总和应该为零的交易继续出现。关于如何获得预期结果有什么想法吗?
谢谢, 旦
修改 GROUP BY 并包括 ENTITY 和 ACCOUNT
GROUP BY TEST.EFF_DATE, TEST.BATCH, ENTITY, ACCOUNT
当您在分组 select 语句中使用某些内容时,它需要在分组依据中。
但是,您可以进行这种嵌套。
您可以使用所有有效的 date/batch 组合并且不为零。
然后只有 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
)