我正在处理一个查询,以便在我的寄宿犬舍简化发票历史记录(以及我比较收据)。
我正在努力将数据从软件数据库中删除,而不是手动完成。我认为我有一个很好的开始,但我有一个问题。
使用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
所以基本上如果petname和invseq在任何/所有invseqs中都相同,那么添加总量(Expr1)并使其成为一行。
我刚刚开始乱搞SQL和Access以获得这样的结果,我不确定从哪里开始。我可以在各种表格上提供更多信息(但它们都非常混乱,因为狗窝软件是为了处理它们而不是我)。
拥有WHERE date >
是完全必要的,因为它大约有15K行,而我的电脑并不喜欢它。这将它降低到非常可用的~500。
导出到excel并做一些excel魔法会更容易吗?我想得到一个好的解决方案,而不是我认为是一个很好的解决方案。
答案 0 :(得分:3)
听起来您只想使用聚合函数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
等,并且宠物有多个不同的条目,那么您将为每个不同的代码说明分别拥有一行。