2013-04-28 4 views
1

J'ai recently obtenu bien sur mon chemin pour obtenir mes factures assemblées dans une belle table facile à regarder. Quelque chose que j'ai fait manuellement manuellement mais que je voudrais faire automagically est énumérer combien de quels éléments sont sur une facture. Manuellement, je regarde la facture et je vois qu'un chien est resté au chenil pendant 3 jours et a pris un bain, donc je mettrais quelque chose comme 3 Board, 1 Bath dans ma feuille de calcul.Concaténer plusieurs résultats dans un seul champ

Le tableau que je possède ces LISTÉS (InvoiceItems.IIItemQuantity et InvoiceItems.IIItemCodeDesc), ainsi que la facture qui ils appartiennent à (InvoiceItems.IIInvSeq).

donc les informations que je voudrais ajouter à mon autre requête ressemble à ceci:

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 

Ce serait la facture 12344 a un chien (petid 12) qui a obtenu 3 CONSEIL D'ADMINISTRATION, 1 salle de bain, et la facture 12345 a deux chiens (14 et 15 ans) qui ont obtenu 4 PLANCHE, 4 JEUX, 1 BAIN et 4 PLANCHE, 2 JEUX, 1 BAIN respectivement. Ma table ressemble actuellement à ceci:

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

et la requête ressemble à ceci:

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; 

Je voudrais la table pour obtenir en quelque sorte une autre colonne pour « éléments » qui seraient les InvoiceItems combinés. IIItemQuantity et InvoiceItems.IIItemCodeDesc. J'ai cherché différentes façons de concaténer des choses, mais rien ne me rapproche du travail (j'ai un tas de jointures internes que je ne sais pas si j'en ai besoin ou pas, ou vraiment beaucoup de ce qui se passe avec tout ça .)

Répondre

1

Vous pouvez définir user defined function à cet effet (tout exemple):

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 

et de l'utiliser dans la requête comme ceci:

select Invoices.invseq, GetItemList(Invoices.InvSeq) as ItemList from Invoices 
Questions connexes