Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 22
  1. #11
    ok se è possibile facciamolo prima con excel. in access sarebbe il massimo ma il file che ho l ho esportato da un software. è possibile lo stesso lavorarci? se si help passo per passo!
    i codici apertura sono 6500 ma tra essi vi sono duplicati e celle vuote. mi sai dire come fare per eliminare in fretta sia i duplicati che le celle vuote?
    grazie

  2. #12
    Per eliminare i duplicati c'è la funzione apposita di excel (cerca nell'help o su google e dovresti trovarla facilmente), mentre per eliminare i buchi basta ordinare le righe (anche qui c'è una funzione apposita) in modo che tutti i buchi vadano in cima e poi si eliminano a mano, in un colpo solo, tutte le righe vuote.

    Veniamo ai conteggi.

    Per semplificare ho fatto direttamente gli interventi nel tuo foglio ma il problema è che il VBA per queste cose è veramente poco pratico comunque ho già fatto parecchio quindi dovresti poter andare avanti da sola, anche perché io adesso devo uscire.

    Però devo spiegartelo per bene se no non ci si capisce niente.

    Per prima cosa ho aggiunto nel foglio resoconto un pulsantino rosso che, cliccato, effettua tutti i calcoli in modo da svincolarci dai gestori degli eventi e rendere tutto più semplice.

    Per modificare l'estetica del pulsante devi entrare in "modalità di progettazione" ed andare col tasto destro nelle proprietà.

    La modalità di progettazione la trovi nella scheda sviluppo (se non ce l'hai devi attivarne la visualizzazione dalle opzioni di excel).

    Il codice invece lo trovi con ALT-F11, vediamolo.

    Per prima cosa c'è una lunga lista di istruzioni che servono a definire e valorizzare delle variabili per dare al vba i riferimenti su cui lavorare, se il foglio che mi hai mandato è uguale a quello reale dovrebbero andare già bene però controllale anche tu che potrei aver sbagliato qualcosa.

    L'unica cosa da sistemare sono i valori di prima e ultima riga dei vari fogli (ovviamente mi riferisco sempre e solo ai dati, senza considerare le righe di intestazione) perché quelli che ho usato io sono riferiti alle poche righe di dati del foglio di esempio.

    Le coppie di assegnazioni, tipo questa

    codice:
       Resoconto_Col_CodiceApertura = "B"
       Resoconto_Col_CodiceApertura = Columns(Resoconto_Col_CodiceApertura).Column

    servono a trasformare la lettera della colonna nel numero corrispondente (quindi la A diventa 1, la B diventa 2, la C 3 eccetera) perché poi la funzione cells che le utilizza ha bisogno dei riferimenti numerici e non letterali.
    In questo modo la variabile Resoconto_Col_CodiceApertura assumerà il valore 2 che indica che la colonna CodiceApertura nel foglio Resoconto è la seconda. E così per tutte le altre.

    Quindi, in sostanza, questa prima lunga serie di assegnazioni serve solo a definire le righe e le colonne su cui si andrà a lavorare ma ancora non compie nessuna azione.

    Poi segue un primo blocco di istruzioni che consiste in due cicli "For Each ... Next" nidificati uno nell'altro.

    Lo scopo di queste istruzioni è di inserire nel foglio TbdRes una colonna temporanea di appoggio (io ho usato la M ma puoi usarne anche un'altra, basta indicarlo nelle definizioni iniziali) in cui inserire i valori dei codice apertura corrispondenti agli idContatto. In questo modo dopo sarà più facile fare i conteggi.

    Questi due cicli non fanno altro che esaminare tutti gli IdContatto del foglio TDBRES (ciclo esterno) e, per ciascuno di essi, esaminare tutti gli idContatto del foglio CONTATTI alla ricerca di una corrispondenza e, quando la si trova, si riporta il codice apertura nel foglio TBDRES.

    Mi soffermo ancora un attimo a spiegarti questi cicli perché, capiti questi, tutto il resto dovrebbe risultare più facile.

    Provando a "tradurre" in italiano questa riga:

    codice:
    For Each TbdRes_IdContatto In Sheets("TBDRES").Range(Sheets("TBDRES").Cells(TbdRes_Prima_Riga, TbdRes_Col_IdContatto), Sheets("TBDRES").Cells(TbdRes_Ultima_Riga, TbdRes_Col_IdContatto))


    diventerebbe una cosa del genere:

    codice:
    Individua sul foglio TBDRES il range delimitato dalle celle che hanno queste coordinate
    
               (prima riga dati, colonna dei contatti)
               (ultima riga dati, colonna dei contatti)
    
    (praticamente punta a tutta la colonna dei contatti) ed esaminale una ad una chiamandole TbdRes_IdContatto.


    L'esame di ciascuna di queste celle consiste in un altro ciclo effettuato sul foglio dei Contatti che punta anche lì a tutta la colonna dei contatti e chiama la cella in esame Tbd_Contatti_Idcontatto.

    Per ognuno di questi successivi esami ciclici viene effettuata una if che si chiede se le due celle sono uguali cioè se il codice contatto che si sta esaminando sul foglio TBDRES coincide con quello che si sta esaminando sul foglio Contatti e se è così viene scritto il codice apertura prelevato dal foglio contatti sulla riga del foglio TBDRES corrispondente al codice she si sta esaminando infatti:

    - Cells(TbdRes_IdContatto.Row, TbdRes_Col_Appoggio)
    è la cella sulla riga del TbdRes_IdContatto in esame posta sulla colonna di appoggio

    - Cells(Tbd_Contatti_Idcontatto.Row, Tbd_Contatti_Col_CodiceApertura)
    è la cella sulla riga del Tbd_Contatti_Idcontatto posta sula colonna CodiceApertura.

    Trovata la corrispondenza e scritto il codice apertura sul foglio TBDRES si può terminare la ricerca e passare al prossimo idContatto quindi si può uscire dal ciclo interno con Exit For.

    E' tutto chiaro? Per questo ti chiedevo che conoscenze avessi di programmazione ...

    Comunque cerca di capire bene la logica che sta dietro queste istruzioni così poi potrai completare da te il codice ancora mancante.


    Andiamo avanti.

    Gli altri due blocchi di istruzioni fanno la stessa cosa del primo sui fogli dei semiresidenti e dei territoriali quindi non te li spiego perché sono uguali.

    A questo punto cosa abbiamo ottenuto? Di scrivere nella colonna M dei tre fogli il codice apertura corrispondente all'idContatto. Tutto qui. Sembra poco ma ci servirà nel seguito.


    Ora c'è il ciclo dei conteggi e se ti è ben chiaro quello che ti ho detto prima questo sarà una passeggiata.

    Qui il ciclo principale, quello esterno, esamina tutti i codici apertura del foglio resoconto e, per ciascuno, conta i residenti, i semiresidenti e i territoriali di ciascun anno eseguendo, per ciascuno dei tre, questa serie di operazioni:

    - Azzera i contatori

    - Cerca nella colonna di appoggio M caricata prima la corrispondeza del codice apertura con quello del ciclo principale e, se trovato. incrementa il contatore corrispondente all'anno della data.

    - Alla fine di ciascun ciclo interno riporta nel foglio resoconto i totali ottenuti.



    Mi rendo conto che se non hai conoscenze di programmazione la cosa può risultare piuttosto complessa ma col VBA non c'è tanto da scegliere, bisogna fare così.

    Con Access come ti dicevo sarebbe tutto più semplice ma devi decidere tu cosa fare anche perché non ho capito cosa intendi quando dici che hai usato un software ... se hai access e il tuo file si apre si dovrebbe anche poter usare.
    Però considera anche che io non ho Access ma MySql che è simile ma non proprio uguale quindi potremmo avere difficoltà anche in quel caso.

    Tornando al codice restano solo le ultime istruzioni che cancellano le colonne di appoggio in modo da non lasciare dati indesiderati e un msgbox che fa comparire un pop-up.

    Quello che ancora c'è da fare è il conteggio per sesso ma non dovresti avere problemi perché, tutto sommato, è simile a quello che ho già fatto mentre qualche difficoltà potresti trovarla nell'eliminazione dei duplicati nel foglio dei territoriali.

    Il problema in quel caso è che i dati sono in ordine sparso (per esempio il codice 17901 lo trovo nelle righe 22 e 23 e poi in quelle da 25 a 30) e quindi non si possono applicare gli schemi classici di rottura di livello. Bisognerebbe inventarsi qualcosa ma adesso non ho il tempo di pensarci.

    Un'ultima cosa: perché ci sono due codici 29530 sia nel resoconto che nei contatti?

    E per finire una considerazione sui tempi perché quando dicevo che per lunedì avremmo finito mi riferivo al problema dei colori, non a questo macigno, un lavoro così grosso richiede molto più tempo per fare tutto per bene.

    Comunque una parte del lavoro è fatta, spero che ti possa servire da guida per il resto. Buon lavoro.

    Ciao
    File allegati File allegati
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #13
    grazie mille per la disponibilità.
    -si il lunedi come tempo di consegna era per i colori.
    -il 29530 ripetuto nel resoconto è errato, mentre quello dei contatti è giusto xke posso avere piu contatti con stesso codice apertura.
    -in access si ci si puo lavorare, possiamo provare se non differenzia troppo da mysql e soprattutto se è piu semplice
    -intanto ora procedo con excel cercando di estrapolare dati che mi servono piu in fretta
    -una cosa però mi era sfuggita di non poco conto forse: quando ho esportato le tabelle gli anni non sono proprio solo anni (nel senso che per es io ti ho detto che vorrei sapere quanti 295 ci sono nel 2009, bene ma le date sono in formato personalizzato es. 15-mar-2009. come faccio a trasformare 6500 righe solo in anno, visto che se provo a cambiare la formattazione non ottengo il risultato???
    grazie

  4. #14
    ciao
    sto lavorando su excel e sul file di esempio mi è quasi tutto chiaro ma, quando applico il tutto al file reale....no!

    Quando puoi per favore spiegami come fare con access se è tutto piu semplice e piu veloce!

    Scusa ma "pensavo fosse piu semplice" invece....

  5. #15
    ciao ho adattato il codice al mio file reale seguendo passo passo le tue indicazioni, ma quando premo il pulsante non fa niente. quale può essere il problema?ho potuto tralasciare qualcosa d'importante? puo essere per la mole di dati? non mi segnala nulla...e come se il pulsante non fosse collegato al codice..
    inoltre ho alcune domande:
    - è possibile, se le mie colonne in tbd_contatti arrivano fino ad AC, nella trascrizione del codice è giusto inserire per esempio: tbd_contatti_col_datains = "AA"?
    - il foglio tbd anagrafica non lo devo codificare per niente? non serve successivamente per il conteggio del sesso?

    inoltre ancora puoi aiutarmi con la tua santa pazienza a:
    - fare il conteggio del sesso? (devo codificare il foglio tbd_anagrafica o tbdanagraficaquery per ricavare il sesso dell'idcontatto?)
    - eliminare i duplicati in tbdterrit x il conteggio annuale dei codiciapertura

    grazie, ciao

  6. #16
    Eccomi qui, adesso ho un po' di tempo e provo a riportare su MySql le tue tabelle, più tardi ti dico qualcosa.

    Intanto provo a rispondere a quello che mi chiedevi.

    Estrapolare l'anno dalla data: non è un problema, si può fare con la funzione year(data) che è quella che ho usato anche nel codice che ti ho mandato quindi puoi trovarne lì un esempio.
    Se invece vuoi visualizzare solo l'anno nelle celle basta dare il formato personalizzato aaaa.

    Se il pulsante sembra non essere collegato al codice può darsi che tu abbia usato il pulsante delle macro invece che quello Active-X oppure che non abbia disattivato la modalità di progettazione che si attiva automaticamente quando inserisci il pulsante oppure che le macro non siano attivate (controlla nella sezione sicurezza delle impostazioni di excel). Non mi vengono in mente altre cause.

    Comunque, se il mio foglio funziona, trasferisci i dati reali su quello invece di inserire il codice su quello vero, può essere una soluzione.

    tbd_contatti_col_datains = "AA" è corretto.

    La tabella anagrafica non l'avevo inserita nelle definizioni iniziali perché per il momento non mi era servita visto che non ero arrivato a fare il conteggio del sesso ma andrebbe inserita anche quella.

    Ora mi concentro sul mysql perché sono fiducioso di risolvere tutto più facilmente quindi lascerei perdere per il momento il sesso e i duplicati.
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  7. #17
    Si ok provo intatto a sostituire i dati sul tuo file.
    Quindi la gran quantità di dati non centra niente? Ad esempio le righe di tbdterr arrivano a 65535. Può essere un problema? Inoltre i miei numeri sono formattati cm testo in quanto importati da access. Fa niente o i numeri devono essere x forza scritti a mano o formattati cm numero?? In ultimo nel mio ci sono anche celle vuote..è un problema?
    Grazie

  8. #18
    Quote Originariamente inviata da RuggieriBarbara Visualizza il messaggio
    Si ok provo intatto a sostituire i dati sul tuo file.
    Quindi la gran quantità di dati non centra niente? Ad esempio le righe di tbdterr arrivano a 65535. Può essere un problema? Inoltre i miei numeri sono formattati cm testo in quanto importati da access. Fa niente o i numeri devono essere x forza scritti a mano o formattati cm numero?? In ultimo nel mio ci sono anche celle vuote..è un problema?
    Grazie

    Allora, io direi di lasciar perdere excel e passare ad Access perché con l'SQL è più facile, quindi non mi porrei il problema dei numeri formattati come testo perché probabilmente la cosa è nata in fase di trasferimento dei dati su excel mentre sul DB saranno nel formato corretto.

    Il numero di righe invece credo che sia un problema ma non perché sono troppe ma perché 65535, guarda caso, è proprio il numero massimo di righe supportate da excel 2003 e forse anche da qualche vecchia versione di Access. Non vorrei allora che in qualche trasferimento da un formato all'altro qualche programma abbia eliminato tutte le righe che non riusciva a caricare causandoti così una perdita di dati. Dovresti verificare nel file originale.

    Ora cominciamo a ragionare un po' con le query e intanto facciamo subito una prima prova così testiamo la compatibilità fra MySql e Access, prova questa query (incollala senza modifiche nel posto in cui Access permette di scrivere query SQL e poi eseguila):

    codice:
    select t1.codiceapertura, sum(t1.2009) as "2009", sum(t1.2010) as "2010", sum(t1.2011) as "2011"
    from
    (
    SELECT codiceapertura, count(*) as "2009", 0 as "2010", 0 as "2011"
    FROM tbdcontatti
    where year(dataapertura) = 2009
    group by codiceapertura
    
    union all
    
    SELECT codiceapertura, 0, count(*), 0
    FROM tbdcontatti
    where year(dataapertura) = 2010
    group by codiceapertura
    
    union all
    
    SELECT codiceapertura, 0, 0, count(*)
    FROM tbdcontatti
    where year(dataapertura) = 2011
    group by codiceapertura ) t1
    
    group by t1.codiceapertura

    e vediamo cosa ottieni, visto che non è tanto complessa spero che Access non faccia storie.

    Questa query dovrebbe rispondere alla tua prima domanda, cioè

    -sapere per ogni anno (2009-2010-2011) quante volte si ripete ogni codice apertura(es.296).

    In allegato l'esito che ottengo io con i soliti dati di prova.

    Se funziona cercherò di ampliarla per aggiungere tutte le varie colonne del report.

    Ora vado a dormire, andiamo avanti domani.

    Ciao
    Immagini allegate Immagini allegate
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  9. #19
    ciao
    scusa dove devo inserirla questa query devo importare in access la tbd resoconto??
    mi spieghi passo passo cosa fare x favore

  10. #20
    Sono arrivato alla query finale (salvo errori e sviste) che dovrebbe fornirti tutto il riepilogo in un colpo solo:

    codice:
    
    select t1.codiceapertura
         , sum(t1.2009tot) as "2009"
         , sum(t1.2009res) as "2009 resid"
         , sum(t1.2009sem) as "2009 semiresid"
         , sum(t1.2009ter) as "2009 territ"
         , sum(t1.2010tot) as "2010"
         , sum(t1.2010res) as "2010 resid"
         , sum(t1.2010sem) as "2010 semiresid"
         , sum(t1.2010ter) as "2010 territ"
         , sum(t1.2011tot) as "2011"
         , sum(t1.2011res) as "2011 resid"
         , sum(t1.2011sem) as "2011 semiresid"
         , sum(t1.2011ter) as "2011 territ"
         , sum(t1.2009mas) as "2009 maschi"
         , sum(t1.2009fem) as "2009 femmine"
         , sum(t1.2010mas) as "2010 maschi"
         , sum(t1.2010fem) as "2010 femmine"
         , sum(t1.2011mas) as "2011 maschi"
         , sum(t1.2011fem) as "2011 femmine"
    
    from
    (
    
    select codiceapertura
         , count(*) as "2009tot"
         , 0        as "2009res"
         , 0        as "2009sem"
         , 0        as "2009ter"
         , 0        as "2010tot"
         , 0        as "2010res"
         , 0        as "2010sem"
         , 0        as "2010ter"
         , 0        as "2011tot"
         , 0        as "2011res"
         , 0        as "2011sem"
         , 0        as "2011ter"
         , 0        as "2009mas"
         , 0        as "2009fem"
         , 0        as "2010mas"
         , 0        as "2010fem"
         , 0        as "2011mas"
         , 0        as "2011fem"
    from tbdcontatti
    where year(dataapertura) = 2009
    group by codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , count(*)
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdprestresid a, tbdcontatti b
    where year(a.dataammiss) = 2009
      and b.idcontatto = a.idcontatto
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , count(*)
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdprestsemiresid a, tbdcontatti b
    where year(a.dataammiss) = 2009
      and b.idcontatto = a.idcontatto
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 1
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdprestterr a, tbdcontatti b
    where year(a.dataprest) = 2009
      and b.idcontatto = a.idcontatto
    group by b.codiceapertura
    
    union all
    
    select codiceapertura
         , 0
         , 0
         , 0
         , 0
         , count(*)
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdcontatti
    where year(dataapertura) = 2010
    group by codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , count(*)
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdprestresid a, tbdcontatti b
    where year(a.dataammiss) = 2010
      and b.idcontatto = a.idcontatto
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , count(*)
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdprestsemiresid a, tbdcontatti b
    where year(a.dataammiss) = 2010
      and b.idcontatto = a.idcontatto
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 1
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdprestterr a, tbdcontatti b
    where year(a.dataprest) = 2010
      and b.idcontatto = a.idcontatto
    group by b.codiceapertura
    
    union all
    
    select codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , count(*)
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdcontatti
    where year(dataapertura) = 2011
    group by codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , count(*)
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdprestresid a, tbdcontatti b
    where year(a.dataammiss) = 2011
      and b.idcontatto = a.idcontatto
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , count(*)
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdprestsemiresid a, tbdcontatti b
    where year(a.dataammiss) = 2011
      and b.idcontatto = a.idcontatto
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 1
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdprestterr a, tbdcontatti b
    where year(a.dataprest) = 2011
      and b.idcontatto = a.idcontatto
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , count(*)
         , 0
         , 0
         , 0
         , 0
         , 0
    from tbdanagrafica a, tbdcontatti b
    where year(b.dataapertura) = 2009
      and b.idcontatto = a.idcontatto
      and a.sesso = 1
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , count(*)
         , 0
         , 0
         , 0
         , 0
    from tbdanagrafica a, tbdcontatti b
    where year(b.dataapertura) = 2009
      and b.idcontatto = a.idcontatto
      and a.sesso = 2
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , count(*)
         , 0
         , 0
         , 0
    from tbdanagrafica a, tbdcontatti b
    where year(b.dataapertura) = 2010
      and b.idcontatto = a.idcontatto
      and a.sesso = 1
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , count(*)
         , 0
         , 0
    from tbdanagrafica a, tbdcontatti b
    where year(b.dataapertura) = 2010
      and b.idcontatto = a.idcontatto
      and a.sesso = 2
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , count(*)
         , 0
    from tbdanagrafica a, tbdcontatti b
    where year(b.dataapertura) = 2011
      and b.idcontatto = a.idcontatto
      and a.sesso = 1
    group by b.codiceapertura
    
    union all
    
    select b.codiceapertura
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , 0
         , count(*)
    from tbdanagrafica a, tbdcontatti b
    where year(b.dataapertura) = 2011
      and b.idcontatto = a.idcontatto
      and a.sesso = 2
    group by b.codiceapertura
    
     ) t1
    group by t1.codiceapertura

    Provo a spiegarti come utilizzarla ma non conoscendo Access si tratterà di spiegazioni un po' vaghe.

    I programmi per la gestione di DB relazionali come Access permettono di fare interrogazioni sia scrivendo direttamente la query sia in modo guidato mostrandoti tutte le colonne di ogni tabella e permettendoti di selezionarle e collegarle opportunamente fra loro.

    La creazione guidata arriva comunque a costruire una query sql che poi viene eseguita.

    Tutto sta quindi a trovare il modo di eseguire direttamente le query saltando la creazione guidata oppure di fare una qualsiasi interrogazione guidata e poi sostituire al codice generato automaticamente la query che ti ho passato.

    Come si faccia esattamente non lo so ma dovrebbe esserci un pulsante o un link o una opzione che dovrebbe chiamarsi "Modifica SQL" oppure "Scrivi query" o qualcosa del genere.

    Una volta inserita ed eseguita la query dovrebbe apparirti a video il risultato e, a quel punto, non so che opzioni offre Access, se cioè si può esportare il risultato o se lo si può salvare in qualche modo, credo però che sia possibile salvarlo come se fosse esso stesso una tabella e in questo modo avresti a disposizione una tabella resoconto con cui fare ciò che vuoi.

    Però prima di arrivare a chiederci come salvare e utilizzare il risultato prova a eseguire la query e a controllare i vari casi a campione (non fidarti ciecamente di quello che ho scritto, a quest'ora e dopo una giornata di lavoro la svista è sempre possibile).

    La query si compone di 18 singole estrazioni che poi vengono messe assieme dalla prima select che lavora assieme alla Group By finale per effettuare le somme.

    Le query sono 18 perché ognuna estrae i dati di una singola colonna del report.

    La prima delle 18 query interne imposta anche i nomi delle colonne a cui poi fa riferimento la select esterna la quale, a sua volta, imposta i nomi delle colonne che vengono visualizzati nel report.

    Ogni query estrae 18 colonne di numeri ma ne valorizza solo una, la prima query valorizza la prima colonna, la seconda query la seconda colonna e così via in modo che poi le somme finali effettuate dalla prima select sommano in ogni colonna i risultati di una sola query.

    Tutte le query fanno delle count(*) per contare quante righe ci sono per ogni codice apertura mentre le tre query che interrogano la tabella dei territoriali impostano un 1 fisso per ogni codice apertura in modo da evitare di contare le righe multiple.

    Tieni presente che potrebbe durare anche svariate decine di minuti vista la quantità di dati, quindi mettiti comoda e aspetta che abbia finito, oppure, ancora meglio, cerca di fare una prova con dei dati parziali se ti riesce così è più veloce ed è più facile verificare i risultati.

    Può darsi che Access aggiunga automaticamente alla fine della query una riga con un limite di tempo, in genere di 20 secondi, in quel caso, se non bastano, devi aumentare il valore e rilanciare la query.

    In allegato il report che ho ottenuto io.

    Sei poi riuscita a capire se hai a disposizione tutti i dati o se ne hai perso alcuni?
    Immagini allegate Immagini allegate
    Ultima modifica di NonCeLaFaccio+; 28-03-2014 a 00:49
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.