Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    10

    Access-numero record da due condizioni

    Ho Una Tabella Access 2003 come segue :

    Cognome Nome Email categ1 categ2 categ3
    ---------------------------------------------------------------------------
    Rossi Mario rossim@abc.it 0023 0149
    Abati Giovanni 0149 0085
    Marini Arturo marinia@xcv.it 0023 0085
    DeGregori Antonio degreg@zxc.it 0085 0149
    Brambilla Diego 0023 0085

    I 6 campi sono tutti di tipo testo;
    i campi categ1, categ2, categ3 hanno una lunghezza di 4 caratteri

    Desidero ottenere un Report come il seguente

    categ email non vuota email vuota totale
    --------------------------------------------------------------------
    0023 2 1 3
    0085 2 2 4
    0149 2 1 3

    Non sono un esperto programmatore, come mi consigliate di procedere ?

    Grazie per il vostro tempo.

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    10
    allego l'esempio di file che riporta con precisione la struttura della tabella e del report


    Grazie per l'attenzione.
    Immagini allegate Immagini allegate

  3. #3
    ciao,chiedi ai mod di spostarti nella sezione corretta visto che ti serve del codice sql.
    comunque dovresti creare una query sql che ti conti, per ogni categoria le email . . .
    ma la categoria da prendere in considerazione può stare in tutti e 3 i cmapi o solo in uno specifico?

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    10
    Grazie.

    Come si vede dall'immagine il valore di categoria puo' essere presente in uno qualsiasi dei tre campi indicati (nella realta' del database i campi "categ" sono 40 !).

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    10
    Preciso inoltre che il numero di "categ" e' da prelevare dal primo campo di un'altra tabella che contiene i due soli campi

    numero categoria
    nome categoria

    Naturalmente al primo campo sono presenti solo alcuni valori
    (ad esempio 0023, 0085, 0149, ...)
    e non tutti i valori (da 0001 a 9999)

    Grazie per il vostro tempo.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    10
    Non mi e' chiaro come far spostare questa richiesta in altro forum.
    Qualcuno puo' spiegarmelo o farlo direttamente ?

    Grazie

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Dovrebbe essere così

    codice:
    select categ,sum(nv) as non_vuota,sum(v) as vuota,sum(nv+v) as totale from (
    SELECT categ1 as categ,sum(iif(email<>"",1,0)) as nv,sum(iif(email="" or isnull(email),1,0)) as v
    FROM Tabella
    group by categ1
    union all
    SELECT categ2,sum(iif(email<>"",1,0)) as non_vuota,sum(iif(email="" or isnull(email),1,0))
    FROM Tabella
    group by categ2
    union all
    SELECT categ3,sum(iif(email<>"",1,0)) as non_vuota,sum(iif(email="" or isnull(email),1,0))
    FROM Tabella
    group by categ3) as tab
    where categ is not null
    group by categ
    Mi sembra di ricordare che access consenta la union di un numero limitato di tabelle. Dubito possa farlo per 40 tabelle. Credo debba fare unioni di un numero ridotto di tabelle e poi unire ulteriormente quelle.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    10
    Diciamo che la prima tabella ha nome "ElencoDati" e ciascun record contiene l'anagrafica,
    il campo "Email" e 40 campi chiamati "Categoria1", "Categoria2", ..., "Categoria40"

    La seconda tabella ha nome "Categoria" e ciascun record contiene due campi :
    id
    nomecategoria

    il campo "Id" e'collegato a ciascuno dei 40 campi "Categoria1", "Categoria2", ... "Categoria40"
    della tabella "ElencoDati".

    Nel test che segue ho mantenuto la struttura da me indicata nella prima domanda
    (cioe' 3 soli campi categ1, categ2 e categ3)

    Le tabelle sono comunque solo due.


    Non ho capito bene il significato di "categ" nella prima riga del suo codice.


    ho provato ad inserire :

    SELECT
    FROM Categoria INNER JOIN ElencoDati ON (Categoria.Id = ElencoDati.Categoria3) AND (Categoria.Id = ElencoDati.Categoria2) AND (Categoria.Id = ElencoDati.Categoria1)

    select categ,sum(nv) as non_vuota,sum(v) as vuota,sum(nv+v) as totale from (
    SELECT categ1 as categ,sum(iif(email<>"",1,0)) as nv,sum(iif(email="" or isnull(email),1,0)) as v
    FROM ElencoDati
    group by categ1
    union all
    SELECT categ2 as categ,sum(iif(email<>"",1,0)) as non_vuota,sum(iif(email="" or isnull(email),1,0))
    FROM ElencoDati
    group by categ2
    union all
    SELECT categ3 as categ,sum(iif(email<>"",1,0)) as non_vuota,sum(iif(email="" or isnull(email),1,0))
    FROM ElencoDati
    group by categ3
    )
    as tab
    where categ is not null
    group by categ
    ;

    ma al salvataggio della query ottengo l'avviso :
    select include parola riservata

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Premesso che non ho minimamente capito come sia strutturato il database e che già il fatto che sia necessaria una query del genere mi lascia pensare a qualche errore di progettazione, a livello teorico la query diventerebbe

    codice:
    select categ,sum(nv) as non_vuota,sum(v) as vuota,sum(nv+v) as totale from (
    SELECT categ1 as categ,sum(iif(email<>"",1,0)) as nv,sum(iif(email="" or isnull(email),1,0)) as v
    FROM Tabella
    group by categ1
    union all
    SELECT categ2,sum(iif(email<>"",1,0)) as non_vuota,sum(iif(email="" or isnull(email),1,0))
    FROM Tabella
    group by categ2
    union all
    SELECT categ3,sum(iif(email<>"",1,0)) as non_vuota,sum(iif(email="" or isnull(email),1,0))
    FROM Tabella
    group by categ3) as tab
    INNER JOIN ALTRA_TABELLA ON .....
    where categ is not null
    group by categ

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    10
    Innanzitutto ringrazio per le risposte.

    Allego 3 immagini (una a questa pagina e le altre due a
    due pagine di forum che invio immediatamente !).
    Il file mdb contiene due sole tabelle :
    "Categoria" ed "ElencoDati"

    La prima immagine ne mostra il contenuto (da cui si desume che,
    ad es., il sig.Rossi ama i libri gialli, di storia e di economia !).
    La seconda ne mostra la struttura e la terza mostra
    il contenuto del report desiderato.

    Sono convinto anch'io che la struttura sia scorretta, ma la
    la tabella "Categoria" contiene circa 1000 record dispersi tra
    Id=0001 e Id=9999 mentre la tabella "ElencoDati" contiene oltre
    40000 record formati da una corposa anagrafica personale e da
    40 campi "Categoria1", "Categoria2", fino a "Categoria40"
    simulati qui dai soli primi 3 campi.
    Percio', a meno di trovare una procedura per una conversione
    automatica ad una struttura piu' efficiente, non so proprio
    come affrontare (se non manualmente !!!) il lavoro.

    Spero in una maggiore chiarezza.

    Ho tentato con il codice proposto, ma non capisco la variabile
    "categ" a che si riferisca.

    Ho tentato anche di creare una query intermedia con le due tabelle
    "puntate reciprocamente" con qualcosa del tipo

    SELECT Categoria.Id, ElencoDati.Email
    FROM Categoria INNER JOIN ElencoDati ON
    (Categoria.Id = ElencoDati.Categoria3) AND
    (Categoria.Id = ElencoDati.Categoria2) AND
    (Categoria.Id = ElencoDati.Categoria1);

    ma non capisco come procedere oltre.

    Grazie per l'attenzione.
    Immagini allegate Immagini allegate

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.