gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:08:09 26 4
gpt4 key购买 nike

我正在处理一个查询,以简化我在寄宿处的发票历史记录(以及我比较收据)。

我没有手动操作,而是从软件制作的数据库中抓取数据。我认为我有一个很好的开始,但我遇到了一些问题。

使用 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魔术会更容易吗?我想得到一个好的解决方案,而不是我认为的好的解决方案。

最佳答案

听起来您肯定只想使用聚合函数 sum()获取 total每只宠物的值(value)。

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等,并且宠物有多个不同的条目,那么每个不同的代码描述都有一个单独的行。

关于sql - 从其他方面相同的行中添加总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16257701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com