Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Access - Visualizzare un conteggio anche se = 0

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Access - Visualizzare un conteggio anche se = 0

Postdi gaetano73 » 24/04/13 22:18

Ciao a tutti. Utilizzo Access 2007.
Nel mio DB c'è una semplice query che conta i record che soddisfano un criterio; se quel criterio non viene soddisfatto, la query è vuota. Io vorrei che la query mi restituisse come risultato del conteggio lo 0.

Si può fare?

Grazie

Gaetano
gaetano73
Utente Senior
 
Post: 247
Iscritto il: 03/09/02 18:36

Sponsor
 

Re: Access - Visualizzare un conteggio anche se = 0

Postdi Flash30005 » 24/04/13 22:56

Credo che ti sia risposto da solo
gaetano73 ha scritto:Nel mio DB c'è una semplice query che conta i record che soddisfano un criterio; se quel criterio non viene soddisfatto, la query è vuota.

Inserisci in quel criterio che se non soddisfa la query deve inserire lo 0 (zero)

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Postdi archimede » 25/04/13 08:23

Non è possibile: una query che conta i records torna sempre un numero, incluso zero nel caso in cui nessun record soddisfa i criteri.

Posta la query.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access - Visualizzare un conteggio anche se = 0

Postdi gaetano73 » 25/04/13 09:36

La query è la seguente:
Codice: Seleziona tutto
SELECT Venditori.[Categoria1], Venditori.[Categoria2], Venditori.[Categoria3], Count(Venditori.[Matricola]) AS [ConteggioDiMatricola], Avg([Data_chiusura]-[Data_apertura]) AS DURATA, Max([Data_chiusura]-[Data_apertura]) AS DURATA_max
FROM Venditori
GROUP BY Venditori.[Categoria1], Venditori.[Categoria2], Venditori.[Categoria3]
HAVING (((Venditori.[Categoria1])="GUASTO") AND ((Venditori.[Categoria2])="PC") AND ((Venditori.[Categoria3])="SOFTWARE")) OR (((Venditori.[Categoria1])="GUASTO") AND ((Venditori.[Categoria2])="PC") AND ((Venditori.[Categoria3])="HARDWARE"));
gaetano73
Utente Senior
 
Post: 247
Iscritto il: 03/09/02 18:36

Postdi archimede » 25/04/13 15:43

E cosa non viene incluso con quella query? Se vuoi tutte le categorie basta togliere la clausola HAVING, altrimenti spiega meglio cosa vuoi ottenere.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access - Visualizzare un conteggio anche se = 0

Postdi gaetano73 » 25/04/13 21:00

Tabella Venditori
Categoria1 - Categoria2 Categoria3 ------ Matricola -- Data_chiusura - Data_apertura
GUASTO ---- PC --------- NON DEFINITO -- 123456 ---- 12/02/2013 ---- 02/02/2013
GUASTO ---- PC ---------- NON DEFINITO -- 789526 ---- 11/03/2013 ---- 09/03/2013
GUASTO ---- PC ---------- HARDWARE ---- 123456 ---- 01/03/2013 ---- 26/02/2013
GUASTO ---- PC ---------- HARDWARE ----- 123456 ---- 02/12/2012 ---- 21/12/2012


Dopo l'esecuzione della query ottengo questo risultato:
Categoria1 --- Categoria2 - Categoria3 - ConteggioMatricola - Durata - DurataMAX
GUASTO ------ PC ---------- HARDWARE - 2 --------------------- 11 ------ 19

Io vorrei invece che mi desse
Categoria1 --- Categoria2 - Categoria3 - ConteggioMatricola - Durata - DurataMAX
GUASTO ------ PC ---------- HARDWARE -- 2 --------------------- 11 ------ 19
GUASTO ------ PC ---------- SOFTWARE -- 0 --------------------- 0 ------- 0

Ovviamente i trattini servono per rendere comprensibile il testo sul forum
gaetano73
Utente Senior
 
Post: 247
Iscritto il: 03/09/02 18:36

Postdi archimede » 26/04/13 09:39

Ovviamente non si può contare qualcosa che non c'è (nel tuo esempio "SOFTWARE" non esiste). Vedo due possibilità:
Codice: Seleziona tutto
SELECT categoria1, categoria2, categoria3, count(matricola) as conteggiodimatricola,
       avg(data_chiusura-data_apertura) as durata, max(data_chiusura-data_apertura) as durata_max
  FROM venditori
 GROUP BY categoria1, categoria2, categoria3
HAVING categoria1 = "GUASTO"
   AND categoria2 = "PC";
oppure
Codice: Seleziona tutto
SELECT categoria1, categoria2,
       iif(categoria3 = "NON DEFINITO", "SOFTWARE", categoria3) as categoria3,
       count(matricola) as conteggiodimatricola,
       avg(data_chiusura-data_apertura) as durata, max(data_chiusura-data_apertura) as durata_max
  FROM venditori
 GROUP BY categoria1, categoria2, iif(categoria3 = "NON DEFINITO", "SOFTWARE", categoria3)
HAVING categoria1 = "GUASTO"
   AND categoria2 = "PC";
La prima query mi pare più logica e lineare, ma vedi tu.

HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Postdi archimede » 26/04/13 10:02

Scusa, avevo interpetato male; rileggendo mi sono accorto che non vuoi nei risultati i records "NON DEFINITO". In tal caso dovrai creare una nuova tabella.

Tabella Cat3
Categoria3
HARDWARE
SOFTWARE

Quindi:
Codice: Seleziona tutto
SELECT v.categoria1, v.categoria2, c3.categoria3, count(v.matricola) as conteggiodimatricola,
       avg(v.data_chiusura-v.data_apertura) as durata, max(v.data_chiusura-v.data_apertura) as durata_max
  FROM cat3 c3 LEFT OUTER JOIN venditori v
    ON c3.categoria3 = v.categoria3
 GROUP BY v.categoria1, v.categoria2, c3.categoria3
HAVING v.categoria1 = "GUASTO"
   AND v.categoria2 = "PC";
Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: Access - Visualizzare un conteggio anche se = 0

Postdi gaetano73 » 26/04/13 10:11

La prima è sicuramente più logica ma adotterò la seconda... è più "vicina" al mio risultato. Grazie 1000!!!
gaetano73
Utente Senior
 
Post: 247
Iscritto il: 03/09/02 18:36

Re:

Postdi scossa » 26/04/13 10:43

archimede ha scritto:Ovviamente non si può contare qualcosa che non c'è (nel tuo esempio "SOFTWARE" non esiste). Vedo due possibilità:
Codice: Seleziona tutto
SELECT categoria1, categoria2, categoria3, count(matricola) as conteggiodimatricola,
       avg(data_chiusura-data_apertura) as durata, max(data_chiusura-data_apertura) as durata_max
  FROM venditori
 GROUP BY categoria1, categoria2, categoria3
HAVING categoria1 = "GUASTO"
   AND categoria2 = "PC";


Ciao,
altra possibile soluzione, un po' più complessa ma che mi sembra renda il risultato richiesto (perlomeno sulla tabella di esempio fornita):

Codice: Seleziona tutto
SELECT Tipologie.categoria1, Tipologie.categoria2, Tipologie.categoria3, Count(venditori.matricola) AS conteggiodimatricola, nz(Avg(data_chiusura-data_apertura),0) AS durata, nz(Max(data_chiusura-data_apertura),0) AS durata_max
FROM (SELECT venditori.categoria1 AS categoria1, venditori.categoria2 AS categoria2, Categoria3.Tipo AS categoria3
FROM venditori, Categoria3
WHERE tipo <> "NON DEFINITO"
GROUP BY venditori.categoria1, venditori.categoria2, Categoria3.Tipo
) AS TIPOLOGIE LEFT JOIN venditori ON (Tipologie.categoria3 = venditori.Categoria3) AND (Tipologie.categoria2 = venditori.Categoria2) AND (Tipologie.categoria1 = venditori.Categoria1)
GROUP BY Tipologie.categoria1, Tipologie.categoria2, Tipologie.categoria3
HAVING (((Tipologie.[categoria1])="GUASTO") AND ((Tipologie.[categoria2])="PC"));
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona

Re: Access - Visualizzare un conteggio anche se = 0

Postdi gaetano73 » 26/04/13 10:53

Per le mia capacità è un po' più comlessa ma adottabile :)
Grazie.
gaetano73
Utente Senior
 
Post: 247
Iscritto il: 03/09/02 18:36

Re: Re:

Postdi scossa » 27/04/13 11:20

scossa ha scritto:Ciao,
altra possibile soluzione, un po' più complessa ma che mi sembra renda il risultato richiesto (perlomeno sulla tabella di esempio fornita):

Codice: Seleziona tutto
SELECT Tipologie.categoria1, Tipologie.categoria2, Tipologie.categoria3, Count(venditori.matricola) AS conteggiodimatricola, nz(Avg(data_chiusura-data_apertura),0) AS durata, nz(Max(data_chiusura-data_apertura),0) AS durata_max
FROM (SELECT venditori.categoria1 AS categoria1, venditori.categoria2 AS categoria2, Categoria3.Tipo AS categoria3
FROM venditori, Categoria3
WHERE tipo <> "NON DEFINITO"
GROUP BY venditori.categoria1, venditori.categoria2, Categoria3.Tipo
) AS TIPOLOGIE LEFT JOIN venditori ON (Tipologie.categoria3 = venditori.Categoria3) AND (Tipologie.categoria2 = venditori.Categoria2) AND (Tipologie.categoria1 = venditori.Categoria1)
GROUP BY Tipologie.categoria1, Tipologie.categoria2, Tipologie.categoria3
HAVING (((Tipologie.[categoria1])="GUASTO") AND ((Tipologie.[categoria2])="PC"));


Mi sono accorto che al messaggio manca la parte finale.

Premessa al funzionamento della query è la presenza di una tabella Categoria3 simile a questa:
    Tipo
    HARDWARE
    SOFTWARE
    NON DEFINITO
Bye!
scossa

Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Avatar utente
scossa
Utente Senior
 
Post: 424
Iscritto il: 01/04/12 16:40
Località: Provincia di Verona


Torna a Applicazioni Office Windows


Topic correlati a "Access - Visualizzare un conteggio anche se = 0":


Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti