2013-04-28 52 views
1

我的recently在我的發票彙總到一個不錯的易於查看錶格的路上得到了很好的結果。我通常手動完成的工作,但我想自動完成的是列出發票上有多少項目。手工查看發票,看到一隻狗在狗窩裏呆了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有一個狗(petid 12)誰得到了三板,1個浴室和發票12345有兩隻狗(petid 14和15),分別獲得了4張牌,4張牌,1張牌和4張牌,2張牌,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。我一直在尋找各種方式來連接事物,但沒有任何東西可以接近工作(我有一堆內部連接,我不知道是否需要或者真的很關心所有事情。)

回答

1

可以定義user defined function用於這一目的(例如只):

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