Newsgroup: it.comp.appl.access
Titolo: Sql ? ingarbugliato! ..e lungo..

Scusate ... pongo questo quesito perchè non riesco proprio a risolverlo
autonomamente...
Nel mio db esistono tre tbl
TblNominativiMedici, Ricette_lt, Farmaci
( avrete capito che si tratta di controlli sulle prescrizioni e spese dei
medici di famiglia)
In TblNominativiMedici ci sono i campi NomeMedico, CodiceMedico
In Ricette_lt i campi CodiceMedico, CodiceFarmaco1, CostoFarmaco1,
CodiceFarmaco2, CostoFarmaco2,..... CodiceFarmaco6, CostoFarmaco6 : questo
perchè per ogni ricetta farmaceutica si possono (per lo più) prescrivere al
massimo 6 farmaci.
In Farmaci ci sono CodiceFarmaco, NomeFarmaco e CodiceATC ( è una
nomenclatura che permette di ragguppare i farmaci secondo categorie
Anatomiche, Terapeutiche e Chimiche :per es.
per N iniziano i farmaci neurologici e così via)
Il quesito che mi hanno posto, è quello di avere la somma del costo dei
farmaci prescritti (cioè CostoFarmaco1 + CostoFarmaco2 +.....CostoFarmaco6)
secondo categorieATC scelte in precedenza, per singolo medico!
... le tabelle sono collegate essendo fornite su CD mensili, in formato txt
e grandi, per lo meno quella Ricette,  circa 100 Mb ( circa 300.000 record)
riesco solo a correlare UN  Ricette.CodiceFarmacoX con UN
Farmaci.CodiceFarmaco  e non con SEI . Anche volendo ripetere l'algoritmo
sei volte il calcolo è molto lento per uno solo
 Questo è il calcolo sul quale sto lavorando ... qualche nome è differente
da quelli che vi ho esposto
 ...datemi una mano!
Sub CalcoloPrincipale()
Dim Time1, Time2, TimeTot As Date 'variabili cronometro
Dim dbs As Database
Dim rstATC, rstMedico, rstRicette As Recordset
Dim StrSqlAtc, StrAtc, StrSqlMedico, StrSqlRicette As String ' stringhe SQL
Dim Prezzo1, Prezzo2, Prezzo3, Prezzo4, Prezzo5, Prezzo6 As Currency
Dim LngCodiceMedico As Long
Set dbs = CurrentDb
Time1 = Now() ' tempo d'inizio calcolo
StrSqlAtc = "select * from tblcodiciatc "
Set rstATC = dbs.OpenRecordset(StrSqlAtc, dbOpenSnapshot) '---------------
recordset degli ATC ricercati
Do Until rstATC.EOF ' ciclo degli ATC
Debug.Print rstATC.Fields(0)
    StrSqlMedico = "SELECT TblNominativiMedici.Codice,
TblNominativiMedici.NomeMedico, " _
                   & "TblNominativiMedici.Distretto,
TblNominativiMedici.TipoConvenzione " _
                   & "FROM TblNominativiMedici WHERE
(((TblNominativiMedici.Distretto)='S'))"
    Set rstMedico = dbs.OpenRecordset(StrSqlMedico, dbOpenSnapshot)
'--------------- recordset della lista
'dei Medici Distretto Sud
'( mancano gli ospedalieri )
    Do Until rstMedico.EOF ' ciclo dei Medici
    LngCodiceMedico = rstMedico.Fields(0)
   ' Debug.Print rstMedico.Fields(0), rstMedico.Fields(1)
            StrSqlRicette = "SELECT DISTINCTROW ricette_lt.CodiceMedico,
PrezziFarmaci.CodiceATC, " _
                       & "ricette_lt.CodiceSpecialità1,
ricette_lt.ImportoLordoSpecialità1 " _
                       & "FROM PrezziFarmaci INNER JOIN ricette_lt ON
PrezziFarmaci.CodiceFarmaco " _
                       & "= ricette_lt.CodiceSpecialità1 GROUP BY
ricette_lt.CodiceMedico, " _
                       & "PrezziFarmaci.CodiceATC,
ricette_lt.CodiceSpecialità1, " _
                       & "ricette_lt.ImportoLordoSpecialità1 HAVING
(((ricette_lt.CodiceMedico)=" & LngCodiceMedico & ") " _
                       & " AND ((PrezziFarmaci.CodiceATC) like ""*" & StrAtc
& "*"" ));"
            Set rstRicette = dbs.OpenRecordset(StrSqlRicette,
dbOpenSnapshot) '------------- recordset delle ricette
            Prezzo1 = 0
            Do Until rstRicette.EOF ' ciclo delle ricette
            Prezzo1 = Prezzo1 + rstRicette.Fields(3)
            Beep
            rstRicette.MoveNext
        Time2 = Now() ' tempo fine calcolo parziale
        TimeTot = Time2 - Time1
        Loop
            Debug.Print TimeTot, Prezzo1, rstMedico.Fields(1)
        rstRicette.Close
    rstMedico.MoveNext
    Loop
rstATC.MoveNext
    rstMedico.Close
Loop
rstATC.Close
dbs.Close
Time2 = Now() ' tempo fine calcolo
TimeTot = Time2 - Time1
'Debug.Print TimeTot
Beep
End Sub
grazie e scusate la confusione!
bc

 secondo categorieATC scelte in precedenza, per singolo medico!
[CUT]
Questa non č una risposta al tuo quesito, ma un consiglio organizza meglio i
dati altrimenti oltre a questo problema ne avrai altri ben peggiori, infatti
dovresti fare una tabella farmaci prescritti con COC_MEDICO, COD_FARMACO,
COSTO_FARMACO.
Ciao Roberto - Syd