Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Excel: conta valori diversi all'interno di gruppi di dati

    Buon pomeriggio!
    mi serve un aiuto per contare quante categorie diverse compaiono in ciascun gruppo di dati.. mi spiego meglio:
    ho una serie di imprese che sono raggruppate tra loro mediante un codice,
    ciascuna impresa presenta delle etichette di categoria (espresse in alcuni casi da numeri in altri da stringhe) ad esempio settore industriale ecc,
    vorrei contare quante categorie diverse compaiono (in maniera univoca) in ciascun gruppo di imprese utilizzando una sola funzione, suggerimenti?
    grazie in anticipo!

    esempio:
    GRUPPO IMPRESA CAT1 CAT2 .....
    001 a 2 nord
    001 b 8 centro
    001 c 2 nord
    002 d 7 sud
    002 f 2 centro
    002 g 4 nord
    003 h 3 nord
    003 i 5 nord

    risultato
    GRUPPO N° CAT1 DIVERSE N° CAT2 DIVERSE
    001 2 2
    002 3 3
    003 2 1

  2. #2
    Ciao,
    il tuo sarebbe un tipico problema da Tabella Pivot se non per un piccolo particolare cioè che in una pivot è possibile fare varie operazioni fra cui anche contare i valori ma non contare i valori "unici".

    O almeno io non sono riuscito a trovare questa opzione.

    Quindi la Pivot credo che sia da scartare.

    Anche con le formule mi sembra assolutamente impossibile mentre sicuramente si può risolvere con una macro ma non ho capito cosa intendi quando dici che vuoi utilizzare una sola funzione.

    E, dimmi un'altra cosa, i dati sono ordinati/ordinabili sulla colonna GRUPPO come nel tuo esempio?
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  3. #3
    Esatto, ho scartato la tabella pivot per lo stesso motivo..
    Con una sola funzione intendo un modo rapido data la numerosità del mio campione.

    I dati sono ordinabili, il gruppo è identificato infatti da un codice numerico progressivo.

    Se è possibile compiere questa operazione con ACCESS va bene lo stesso, basta che trovo una soluzione

  4. #4
    Bè con Access diventa banale perché ci sono le funzioni Group By e Distinct fatte apposta per questo.

    La prova l'ho fatta con MySQL perché non ho access ma il linguaggio SQL è uguale per entrambi quindi dovrebbe funzionare anche su access.

    Praticamente ho definito una tabella "Morgana" con quattro colonne Gruppo, Impresa, Cat1 e Cat2, ho inserito i tuoi valori di esempio e poi ho eseguito questa query:

    codice:
    SELECT Gruppo, count( DISTINCT Cat1 ) , count( DISTINCT Cat2 )
    FROM `Morgana`
    GROUP BY Gruppo
    Ottenendo esattamente ciò che ti serve come da screenshot allegato.

    Fammi sapere se risolvi in questo modo, se non cerchiamo un'altra soluzione.
    Immagini allegate Immagini allegate
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  5. #5
    L'operatore distinct non è supportato in access.. mi restituisce l'errore di operatore mancante e ne ho trovato conferma sul web.

    A partire da queste indicazioni sono andata un pò avanti http://www.geeksengine.com/article/a...nct-count.html

    ma ancora non ottengo il risultato voluto: facendo un conteggio manuale i dati sono parzialmente diversi, ecco i comandi inseriti, sapresti indicarmi l'errore?

    SELECT [%$##@_Alias].GRUPPO, Count([%$##@_Alias].NUTS1) AS ConteggioDiNUTS1, Count([%$##@_Alias].ATECO) AS ConteggioDiATECO
    FROM (select distinct GRUPPO,
    NUTS1, ATECO
    from DB) AS [%$##@_Alias]
    GROUP BY [%$##@_Alias].GRUPPO;

  6. #6
    Allora,
    l'idea di quel link è buona e a quanto pare non è la distinct in sé a non essere supportata ma la count(distinct), comunque il tuo caso è più complesso perché devi contare due valori non uno e questo complica abbastanza le cose.
    Alla fine però con tre livelli di query sono arrivato a ottenere il risultato e senza nemmeno utilizzare distinct, speriamo che ad access piaccia:

    codice:
    select t1.gruppo, tot_cat1, tot_cat2
      from
    
        (select tabella1.gruppo, sum(c1) as tot_cat1
           from
                (select gruppo, cat1, 1 as c1
                   from morgana
                  group by gruppo, cat1) as tabella1
    
          group by tabella1.gruppo) as t1,
    
        (select tabella2.gruppo, sum(c2) as tot_cat2
           from
                (select gruppo, cat2, 1 as c2
                   from morgana
                  group by gruppo, cat2) as tabella2
    
          group by tabella2.gruppo) as t2
    
     where t1.gruppo = t2.gruppo
    fai sapere.
    La democrazia rappresentativa ha fatto il suo tempo, è ora di passare alla democrazia diretta.
    www.beppegrillo.it

  7. #7
    Credo di aver risolto!
    Grazie per il prezioso aiuto

  8. #8
    Figurati, l'sql è divertente.
    Ciao
    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.