从其他方面相同的行中添加总计

我正在处理一个查询,这个查询将简化发票历史logging(和我比较收据)。

我没有手动做,而是从数据库中提取数据。 我觉得我有一个很好的开始,但是我有一个问题。

使用Microsoft Access,我添加了一些关系(它使用INNER连接)之间的几个表具有所有的信息,我有这样的SQL语句:

SELECT Invoices.InDate, Pets.PtPetName, [IIQuantity]*[IIEach] AS Expr1, Clients.CLLastName, InvoiceItems.IIItemCodeDesc, Invoices.InSeq FROM (((Clients INNER JOIN Pets ON Clients.CLSeq = Pets.PtOwnerCode) INNER JOIN Invoices ON Clients.CLSeq = Invoices.InClientSeq) INNER JOIN InvoiceItems ON (Invoices.InSeq = InvoiceItems.IIInvSeq) AND (Pets.PtSeq = InvoiceItems.IIPetSequence)) INNER JOIN Inventory ON InvoiceItems.IIItemCode = Inventory.InvSeq WHERE (((Invoices.InDate)>#12/31/2012#)) ORDER BY Invoices.InSeq; 

这给了我一些东西:

  DATE | NAME | TOTAL | LNAME | INVSEQ ---------------------------------------- 1/1/2013 | ODIE | 15 | SMITH | 12344 1/1/2013 | ODIE | 60 | SMITH | 12344 1/1/2013 | YODA | 10 | QWERT | 12345 1/1/2013 | YODA | 25 | QWERT | 12345 1/1/2013 | YODA | 80 | QWERT | 12345 1/1/2013 | C3PO | 10 | QWERT | 12345 1/1/2013 | C3PO | 80 | QWERT | 12345 

在这种情况下,是因为ODIE洗澡和登机而发生的事情,YODA洗澡,登机等等,C3PO刚刚洗澡和登机。

我想要的是:

  DATE | NAME | TOTAL | LNAME | INVSEQ ---------------------------------------- 1/1/2013 | ODIE | 75 | SMITH | 12344 1/1/2013 | YODA | 115 | QWERT | 12345 1/1/2013 | C3PO | 90 | QWERT | 12345 

所以基本上,如果petname和invseq在任何/所有invseq中都是相同的,那么将总量(Expr1)加起来并使其成为一行。

我刚刚开始搞乱SQL和Access来解决这个问题,我真的不知道从哪里开始。 我可以在各种表格上给出更多的信息(但是它们都非常混乱,因为狗窝软件是用来处理它们的,而不是我)。

这是完全必要的,因为它是在约15K行,我的电脑不喜欢这个。 这削减到一个非常有用的〜500。

出口到excel会不会更容易一些,而是做一些优秀的魔法呢? 我想得到一个好的解决scheme,而不是特别是我认为会是一个好的解决scheme。

这听起来像你只是想使用聚合函数sum()来获得每个宠物的total

 SELECT Invoices.InDate, Pets.PtPetName, SUM([IIQuantity]*[IIEach]) AS Total, Clients.CLLastName, Invoices.InSeq FROM (((Clients INNER JOIN Pets ON Clients.CLSeq = Pets.PtOwnerCode) INNER JOIN Invoices ON Clients.CLSeq = Invoices.InClientSeq) INNER JOIN InvoiceItems ON (Invoices.InSeq = InvoiceItems.IIInvSeq) AND (Pets.PtSeq = InvoiceItems.IIPetSequence)) INNER JOIN Inventory ON InvoiceItems.IIItemCode = Inventory.InvSeq WHERE (((Invoices.InDate)>#12/31/2012#)) GROUP BY Invoices.InDate, Pets.PtPetName, Clients.CLLastName, Invoices.InSeq ORDER BY Invoices.InSeq; 

你会注意到一旦聚合函数被添加了一个GROUP BY子句。 我删除了InvoiceItems.IIItemCodeDesc列的列表,因为它看起来不像你想要的结果。 如果这个描述栏包括boardingbath等,宠物有多个不同的条目,那么你将有一个单独的行,每个这些不同的代码描述。