Newsgroup: it.comp.appl.access
Titolo: Non riesco a fare una query

Ho una tabella con i seguenti campi:
ID
CENTRO_DI_COSTO
COSTO
CHECK1
CHECK2
CHECK3
I campi check 1, 2 e 3 possono anche convivere e sono di tipo si/no.
Esempio di record
ID  CENTRO_DI_COSTO COSTO CHECK1 CHECK2 CHECK3
1    MILANO                        300            SI            NO
NO
2    ROMA                            400            SI            SI
SI
3    MILANO                        250            SI            SI
NO
Non riesco a costruire una query che mi dia il totale (somma di COSTO)
riferito ai CENTRI_DI_COSTO in tutti i casi che si possono verificare in
relazione ai valori assunti dai vari check.
Il risultato ideale sarebbe:
MILANO   CHECK1 E 2     650
MILANO   CHECK 1          300
ROMA       CHECK 1 E 2    400
MILANO    CHECK3            0
ROMA         CHECK 3        400
Mi serve il criterio, perchè in realtà i check ed i centri di costo sono
moltissimi e non posso quindi specificarli nell'having o where della query.
Come fareste?

Ti mando una funzione che totalizza i dati per centro di costo e
combinazioni di Check. Credo sia abbastanza veloce. Ricordati che devi
creare una tabella di appoggio (sta scritto nei commenti). Spero di non aver
capito male, cioč che non ci sono altri Check4, Check5, Check6, etc...
Comunque, anche in questo caso, facendo una piccola modifica puoi espandere
il numero dei Check (Vedi la parte relativa alla generazione dei record
vuoti).
'//////////////////////////////////////////////////////
Public Function CalcoloTotaliCentroCheck() As Boolean
'//////////////////////////////////////////////////////
' Titolo: CalcoloTotaliCentroCheck
' Autore: Antonio Misericordia
' Data  : 22-10-2000
' Note:
' Questa funzione legge i dati presenti nella tabella relativa ai costi
' e li totalizza in una tabella relativa ai centri di costo ed a tutte
' le possibili combinazioni dei check 1 2 e 3.
' Preliminarmente viene azzerata la tabella totali ed in essa vengono
inseriti
' tanti record vuoti per quante sono le possibili combinazioni dei 3 check.
' (Nota: viene inserita anche la configurazione con i 3 check = false)
' La tabella totali puň essere utilizzata come tabella sorgente della
' query (o del report) che presenta i totali.
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim l As Integer
Dim vCheck(1 To 3) As Boolean
Dim dbc As Database
Dim dsDati As Recordset
Dim dsTotali As Recordset
Set dbc = CurrentDb
' /////////////////////////////////////////////////////////////////////////
' Questa č una tabella locale che devi creare nel database programmi.
' La sua struttura č perfettamente identica alla tabella contenente i dati.
' In piů deve avere la chiave primaria ("PrimaryKey") composta dai campi:
' CENTRO_DI_COSTO
' CHECK1
' CHECK2
' CHECK3
' /////////////////////////////////////////////////////////////////////////
GoSub InizializzaTabellaTotali
Set dsDati = dbc.OpenRecordset("TabellaCentrieCheck") ' quella di cui
riporti il tracciato record.
If Not dsDati.EOF Then
    GoSub CreaCombinazioni
    dsDati.MoveFirst
    Do Until dsDati.EOF
        dsTotali.Seek "=", dsDati("CENTRO_DI_COSTO"), dsDati("CHECK1"),
dsDati("CHECK2"), dsDati("CHECK3")
        If dsTotali.NoMatch Then
            dsTotali.AddNew
            dsTotali("CENTRO_DI_COSTO") = dsDati("CENTRO_DI_COSTO")
            dsTotali("CHECK1") = dsDati("CHECK1")
            dsTotali("CHECK2") = dsDati("CHECK2")
            dsTotali("CHECK3") = dsDati("CHECK3")
            dsTotali("COSTO") = dsDati("COSTO")
            dsTotali.Update
        Else
            dsTotali.Edit
            dsTotali("COSTO") = dsTotali("COSTO") + dsDati("COSTO")
            dsTotali.Update
        End If
        dsDati.MoveNext
    Loop
End If
dsTotali.Close
dsDati.Close
Set dbc = Nothing
CalcoloTotaliCentroCheck = True
Exit Function
'////////////////////
CreaCombinazioni:
'////////////////////
dsDati.MoveFirst
Do Until dsDati.EOF
    dsTotali.Seek ">=", dsDati("CENTRO_DI_COSTO")
    If dsTotali.NoMatch Then
        GoSub InserisceRecordCombinazioni
    ElseIf dsTotali("CENTRO_DI_COSTO") <> dsDati("CENTRO_DI_COSTO") Then
        GoSub InserisceRecordCombinazioni
    End If
    dsDati.MoveNext
Loop
Return
'///////////////////////////
InserisceRecordCombinazioni:
'///////////////////////////
    For i = 0 To 1
        For j = 0 To 1
            For k = 0 To 1
                vCheck(1) = (i = 1)
                vCheck(2) = (j = 1)
                vCheck(3) = (k = 1)
                dsTotali.AddNew
                dsTotali("CENTRO_DI_COSTO") = dsDati("CENTRO_DI_COSTO")
                For l = 1 To 3
                    dsTotali("Check" & l) = vCheck(l)
                Next l
                dsTotali.Update
            Next k
        Next j
    Next i
Return
'////////////////////////
InizializzaTabellaTotali:
'////////////////////////
    Set dsTotali = dbc.OpenRecordset("TotaliCentriCheck")
    dsTotali.Index = "PrimaryKey"
    ' Reset Tabella costi totali:
    Do Until dsTotali.EOF
        dsTotali.Delete
        dsTotali.MoveNext
    Loop
    dsTotali.Close
    Set dsTotali = dbc.OpenRecordset("TotaliCentriCheck")
    dsTotali.Index = "PrimaryKey"
Return
End Function
Spero di esserti stato di aiuto.
Ciao e Buon Lavoro. Se hai problemi puoi contattarmi.
Antonio Misericordia
-- 
Posted from 
smtp5.libero.it
 [193.70.192.55] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 wrote in message
8t1b3j$36q0$1...@stargate1.inet.it...



azz! acc!
una cosetta di base...... provo ad adattarla, grazie a tutti comunque