从其他方面相同的行中添加总计
我正在处理一个查询,这个查询将简化发票历史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
列的列表,因为它看起来不像你想要的结果。 如果这个描述栏包括boarding
, bath
等,宠物有多个不同的条目,那么你将有一个单独的行,每个这些不同的代码描述。