Newsgroup: it.comp.appl.access
Titolo: query veloce per esperti

Buongiorno,
ho la necessità partendo da questa tabella di esempio con 2 soli
campi:
| ID           |    NumReg     |
--------------------------------------
| 1            |        122        |
| 2            |        344        |
| 2            |        455        |
| 3            |        677        |
| 3            |        215        |
| 3            |        678        |
ottenere questo con una group by "speciale" :
| ID           |    NumRegColl         |
------------------------------------------------
| 1            |        122                  |
| 2            |        344 ,455           |
| 3            |        677,215,678      |
è possibile in Access?
Grazie 1000,
Rob

 ha scritto nel messaggio 
news:802f50c0-1475-4844...@d21g2000prf.googlegroups.com...
Buongiorno,
ho la necessitą partendo da questa tabella di esempio con 2 soli
campi:
| ID           |    NumReg     |
--------------------------------------
| 1            |        122        |
| 2            |        344        |
| 2            |        455        |
| 3            |        677        |
| 3            |        215        |
| 3            |        678        |
ottenere questo con una group by "speciale" :
| ID           |    NumRegColl         |
------------------------------------------------
| 1            |        122                  |
| 2            |        344 ,455           |
| 3            |        677,215,678      |
--------------------------------------------------------
Risposta :
facciamo cosģ...
Premessa (ho immaginato che la tua Tabella si chiamasse Tabella1, quindi tu 
cambia ovunque...)
Metti in un modulo questo codice :
Public Function aggr(cod As Integer) As String
    Dim i As Integer
    Dim contarecord As Integer
    Dim daiaggr As String
    datiaggr = ""
    Dim db As Database
    Set db = CurrentDb
    Dim rs As DAO.Recordset
    Set rs = db.OpenRecordset("select * from Tabella1 where ID=" & cod)
        rs.MoveLast
        contarecord = rs.RecordCount
        rs.MoveFirst
        For i = 1 To contarecord
            If datiaggr = "" Then
                datiaggr = rs!NumReg
            Else
                datiaggr = datiaggr & "," & rs!NumReg
            End If
            rs.MoveNext
        Next i
    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
    aggr = datiaggr
End Function
poi crea una query e metti questo codice sql :
SELECT Tabella1.ID, aggr([ID]) AS NumRegColl
FROM Tabella1
GROUP BY Tabella1.ID, aggr([ID]);
Che ne dici?
;-)
-- 
---
Ciao
Pablitomf (Maurizio Facciuti)
Web Master 
www.accessgroup.it

Dico che hai aggirato il problema. :)
La query mi serviva per un programma VB con base Access.Mi era già
venuta un'idea simile alla tua (prima di fare la query,creavo un nuovo
campo che popolavo con un ciclo e poi lo usavo nella query).Il
problema è che avevo paura che con 10.000 record l'utente avrebbe
aspettato 10 minuti per un report.
Cmq il tuo esempio è valido e lo proverò .
Grazie.
Rob

Cmq il tuo esempio č valido e lo proverň .
oh grazie... te ne sono grato


 oh grazie... te ne sono grato
Non è aggirare è risolvere.
tu hai solo due possibilità o quella di Pablitomf o ti crei una temporanea
-- 
-- 
MAssimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access

 Cisa - Conferenza Italiana Sviluppatori Access
Credo che la soluzione di Pablitomf sia + performante che ricreare
ogni volta la temporanea.
L'unico problema è che essendo un programma  VB su Access,come faccio
a distribuire un exe che crei il modulo/Funzione sopracitata nei DB
dei vari clienti?
Io creo e modifico Tabelle dinamikamente,ma si può fare lo stesso coi
moduli?
Spero di essere stato chiaro,
grazie ancora,
bye