我正在处理一个查询,以简化我在寄宿处的发票历史记录(以及我比较收据)。
我没有手动操作,而是从软件制作的数据库中抓取数据。我认为我有一个很好的开始,但我遇到了一些问题。
使用 Microsoft Access,我在几个包含所有信息的表之间添加了一些关系(使用 INNER JOINS),并且我有一个如下 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
因此,基本上,如果任何/所有 invseq 中的 petname 和 invseq 相同,则将总金额 (Expr1) 相加并使其成为一行。
我刚刚开始使用 SQL 和 Access 来解决这样的问题,但我不确定从哪里开始。我可以提供有关各种表格的更多信息(但它们都非常混乱,因为狗窝软件是用来处理它们的,而不是我)。
完全有必要拥有它,WHERE date >
因为它大约有 15K 行,而我的计算机不喜欢这样。这将其减少到非常有用的〜500。
导出到excel并做一些excel魔术会更容易吗?我想得到一个好的解决方案,而不是我认为的好的解决方案。