1

最近在将发票放在一个易于查看的表格中的过程中做得很好。我通常手动完成但我想自动做的事情是列出发票上有多少项目。我手动查看发票,发现一只狗在狗窝里待了 3 天并洗了个澡,所以我3 Board, 1 Bath在电子表格中放了类似的东西。

我的表格列出了这些(InvoiceItems.IIItemQuantityInvoiceItems.IIItemCodeDesc),以及它们属于什么发票(InvoiceItems.IIInvSeq)。

所以我想添加到我的其他查询中的信息如下所示:

QUANTITY | ITEMDESC | INVOICE | PETID
---------|----------|---------|------
    3    |   BOARD  |  12344  |  12
    1    |    BATH  |  12344  |  12
    4    |   BOARD  |  12345  |  14
    4    |    PLAY  |  12345  |  14
    1    |    BATH  |  12345  |  14
    4    |   BOARD  |  12345  |  15
    2    |    PLAY  |  12345  |  15
    1    |    BATH  |  12345  |  15

这将是发票 12344 的一只狗(宠物编号 12)获得了 3 个 BOARD、1 个 BATH,而发票 12345 有两只狗(宠物编号 14 和 15)获得了 4 个 BOARD、4 PLAY、1 BATH 和 4 BOARD、2 PLAY、1分别洗澡。我的桌子目前看起来像这样:

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

查询如下所示:

SELECT 
  Invoices.InDate, 
  Pets.PtPetName, 
  SUM([IIQuantity]*[IIEach]) AS Total, 
  Clients.CLLastName
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;

我希望表格以某种方式获得另一列“项目”,即 InvoiceItems.IIItemQuantity 和 InvoiceItems.IIItemCodeDesc 的组合。我一直在寻找各种连接事物的方法,但没有什么能接近工作(我有一堆内部连接,我不知道我是否需要,或者真的很多关于这一切的事情.)

4

1 回答 1

1

您可以为此目的定义用户定义的函数(仅作为示例):

Public Function GetItemList(invoice as Integer) As String
    Dim r As DAO.Recordset
    Dim result As String
    result = ""
    Set r = CurrentDb.OpenRecordset("SELECT Quantity, ItemDesc FROM your_joins WHERE Invoices.InvSeq =" & invoice & ";")
    do until r.EOF
        result = result & CStr(r![Quantity]) & " " & r![ItemDesc] & ", "
        r.MoveNext
    loop
    r.Close
    GetItemList = result
End Function

并在这样的查询中使用它:

select Invoices.invseq, GetItemList(Invoices.InvSeq) as ItemList from Invoices
于 2013-04-28T03:35:48.917 回答