如何在MS Access中获取总值或SUM(值)

问题描述:

在MS Access中,我已连接到具有只读访问权限的外部Oracle数据库表。该表跟踪物品的生产过程(prodnr)。一篇文章可能会在一次或几次运行中生成,直到完成目标数量。如何在MS Access中获取总值或SUM(值)

如何从该表中获取完整的AMOUNT(completekz = 1)或SUM(AMOUNT)(仅completekz = 0条目)。

PRODNR COMPLETEKZ BACOMPLETEKZ  AMOUNT 
------ ---------- ------------ ---------- 
    ...   ...     ... 
    16 0   partial    500 
    16 0   partial   20000 
    16 0   partial   8000 
    16 1   complete   40000 
    17 1   complete   100 
    18 0   partial   10000 
    18 0   partial   1500 
    19 1   complete   35000 
    ...   ...     ... 

这是我的查询,返回所有四行。我似乎无法找到正确的方法。

SELECT 
prodnr, 
completekz, 
bacompletekz, 
IIF (((SELECT MAX(sub1.completekz) FROM aforueck AS sub1 WHERE sub1.prodnr = '16') = '1'), 
    amount, 
    '-1' 
) AS Test 
FROM aforueck 
WHERE prodnr = '16' 

考虑

SELECT Q1.prodnr, Sum(IIf(([completekz]=1 And [MaxComp]=1) Or ([completekz]=0 And [MaxComp]=0),[Amount],0)) AS SumAmt FROM (SELECT aforueck.prodnr, aforueck.completekz, aforueck.bacompletekz, aforueck.amount, DMax("Completekz","aforueck","Prodnr='" & [prodnr] & "'") AS MaxComp FROM aforueck) AS Q1 GROUP BY prodnr;

SELECT aforueck.prodnr, Sum(IIf(([completekz]=1 And [MaxComp]=1) Or ([completekz]=0 And [MaxComp]=0),[Amount],0)) AS SumAmt FROM (SELECT aforueck.PRODNR, Max(aforueck.COMPLETEKZ) AS MaxComp FROM aforueck GROUP BY aforueck.PRODNR) AS Q1 INNER JOIN aforueck ON Q1.PRODNR = aforueck.PRODNR GROUP BY aforueck.prodnr;

都返回:
+--------+--------+ | prodnr | SumAmt | +--------+--------+ | 16 | 40000 | | 17 | 100 | | 18 | 11500 | | 19 | 35000 | +--------+--------+

这适合“complete AMOUNT(completekz = 1)或SUM(AMOUNT)(仅completekz = 0条目)”的描述。如果这不是所需的输出,请举例说明。

+0

感谢您的回复。不幸的是,这两个查询都没有返回所需的值,我无法从语句中读取原因。目标表包含许多具有理想prodnr的条目,但是任一查询都会返回不包含任何匹配的完全不同的行。 Mabe我的做法是错误的。 Mabe我应该总是取得一组产品的最后一个条目。但是这让我回到了同样的问题。合适的查询将如何?我改善了我的入职情况,以更清楚地解释情况。 – Tino

+0

您提供了更多原始数据示例,但仍然说'返回所有四行'。不太清楚。看到我修改后的答案。 – June7

+0

事实上,我不确定我的问题是否清楚,因为我收到了来自我的数据源的奇怪结果,但是您返回的数据是我期望的。出于某种原因,它不会从我的数据源返回我期望的结果,这就是为什么我想知道我的方法来获取所需的行是正确还是另一种方法(总是选择prodnr的最后一行)可能是更好的解决方案。我不确定我是否可能会问几乎相同的问题作为一个新问题,或者我是否应该在此问问总是如何提取prodnr的最后一行。不想一无所获。你有什么建议? – Tino