Visualizzazione dei risultati da 1 a 10 su 22

Hybrid View

  1. #1
    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

  2. #2
    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

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

  4. #4
    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

  5. #5
    Quote Originariamente inviata da RuggieriBarbara Visualizza il messaggio
    ciao ho inserito la tua query e mi da l 'errore seguente:
    Errore di sintassi (operatore mancante) nell'espressione della query 'sum (t1.2009tot)'.

    Cosa può essere!!
    Ciao, non scrivermi in privato, restiamo in pubblico.

    Cosa può essere? E chi lo sa, non voglio credere che Access non possa fare la sum di una colonna.

    Ovviamente do per scontato che hai incollato integralmente la query senza dimenticarne dei pezzi quindi è un po' difficile capire cosa non va bene.

    Prova un po' quest'altra query e vediamo se gli piace, è la stessa query ma molto semplificata, non serve a estrarre dati significativi ma solo a capire se il problema è di sintassi o d'altro.

    Se funziona dovrebbe semplicemente restituirti il numero totale di tutti i codici apertura del 2009.


    codice:
    select sum(tot)
    from
    (
    select codiceapertura
         , count(*) as "tot"
    from tbdcontatti
    where year(dataapertura) = 2009
    group by codiceapertura
     ) t1

    Se non dovesse funzionare potresti valutare di passare a MySql?

    E' molto più potente di Access nel senso che tratta quantità di dati maggiori, è più veloce, esegue più comandi, si può installare anche in versione live su una chiavetta in modo che non sporchi il registro di sistema ed è gratuito.

    Posso dirti come fare, non è difficile, io lo uso attraverso lo Xampp che è una versione semplificata di
    un server web, però dipende se stai lavorando sul tuo computer e quindi sei libera di fare quello che vuoi o su quello dell'ufficio e devi chiedere il permesso.

    A proposito, che versione di Windows usi (e quanti bit, 32 o 64?) e che versione di Access?
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  6. #6
    grazie di tutto!
    Risolto tutto con access.
    Saluti

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 © 2026 vBulletin Solutions, Inc. All rights reserved.