Newsgroup: it.comp.appl.access
Titolo: Count Distinct?

Ho una tabella [Tab1] ha 3 campi [Cliente], [Codice], [Commessa]. E'
possibile costruiru una query che raggruppi per [Cliente] e che
all'interno mi restituisca il conteggio di [Codice] e di [Commessa]
senza considerare i doppioni? (Similmente al SELECT DISTINCT)
ES:	
Cliente		Codice		Commessa
A		C1		10
A		C1		20
A		C2		30
Risultato query:
Cliente		ConteggioDiCodice	ConteggioDiCommessa
A		1			3
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Scusa, le commesse sono tre e vuoi 3 (OK).
Ma i codici sono due (C1 e C2) e perché vuoi che te ne conti solo 1?
Penso proprio di non capire cosa ti serva.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ha scritto nel messaggio
news:582e5efd3238542a8e2...@mygate.mailgate.org...

Ciao Ste Vise
Da quanto ho capito il risultato della query dovrebbe essere
Cliente ConteggioDiCodice ConteggioDiCommessa
A 2 3
Se intendi ottenere il risultato di una query tipo questa
Select Cliente,Count(DISTINCT Codice) NrCodice,Count(Commessa) NrCommesse
FROM CliComm
GROUP BY Cliente
In  access puoi fare ....
Select C1.Cliente,C3.NrCodice,Count(C1.Commessa) AS NrCommesse
FROM CliComm C1 INNER JOIN
     (Select Count(Cx.Codice) AS NrCodice,Cx.Cliente
      From (Select Distinct Cliente,Codice FROM CliComm) Cx
      GROUP BY Cx.Cliente) C3
      ON C1.Cliente=C3.Cliente
      GROUP BY C1.Cliente,NrCodice
Il Risultato è
Cliente NrCodice    NrCommesse
------- ----------- -----------
A                 2           3
Ciao Giorgio.

 
Essendo per me la tabella=[INDEX_SelezioneDati] il Cliente=[DSCOCP], il
Codice=[CDAROO] e la Commessa=[CDCOOO]
ho provato con:
SELECT C1.DSCOCP, C3.NrCodice, Count(C1.CDCOOO) AS NrCommesse
FROM INDEX_SelezioneDati C1 INNER JOIN  (Secect Count(Cx.CDAROO) AS
NrCodice, Cx.DSCOCP From (Select Distinct DSCOCP, CDAROO FROM
INDEX_SelezioneDati) Cx GROUP BY Cx.DSCOCP) C3 ON C1.DSCOCP=C3.DSCOCP
GROUP BY C1.DSCOCP, NrCodice
Ma Access mi restituisce il seguente errore:
"Errore di sintassi nell'espressione join" evidenziandomi la seconda
parentesi dopo l'espressione "INNER JOIN" dell'sql.
Vise


 ha scritto nel messaggio
news:f2a70d6060f6b55ce18...@mygate.mailgate.org...

Sostituisci dopo INNER JOIN !!!Secect!!! con Select e verdai che funziona.
Ciao Giorgio

 Ciao Giorgio


SELECT C1.DSCOCP, C3.NrCodice, Count(C1.CDCOOO) AS NrCommesse
FROM INDEX_SelezioneDati C1 INNER JOIN  (Select Count(Cx.CDAROO) AS
NrCodice, Cx.DSCOCP From (Select Distinct DSCOCP, CDAROO FROM
INDEX_SelezioneDati) Cx GROUP BY Cx.DSCOCP) C3 ON C1.DSCOCP=C3.DSCOCP
GROUP BY C1.DSCOCP, NrCodice
E se volessi aggiungere un campo che mi restituisca, sempre analizzando
la tabella base [INDEX_SelezioneDati], il numero di record per il
raggruppamento scelto: cliente (DSCOCP)... è possibile?


 ha scritto nel messaggio
news:86c93921ace77e661be...@mygate.mailgate.org...

Credo di non aver capito, il numero di record interessati dal raggruppamento
DSCOCP è già contenuto in NrCommesse.
Forse è meglio che posti un esempio dell'output che vuoi ottenere.
Ciao Giorgio

 Forse è meglio che posti un esempio dell'output che vuoi ottenere.
SELECT C1.DSCOCP, C3.NrCodice, Count(C1.CDCOOO) AS NrCommesse
FROM INDEX_SelezioneDati C1 INNER JOIN  (Select Count(Cx.CDAROO) AS
NrCodice, Cx.DSCOCP From (Select Distinct DSCOCP, CDAROO FROM
INDEX_SelezioneDati) Cx GROUP BY Cx.DSCOCP) C3 ON C1.DSCOCP=C3.DSCOCP
GROUP BY C1.DSCOCP, NrCodice
Fino a qua se la tab [INDEX_SelezioneDati] è:
DSCOCP  CDAROO   CDCOOO
------- -------- ------
A       C1       10
A       C1       20
A       C2       30
A       C2       30
la query:
Cliente NrCodice    NrCommesse
------- ----------- -----------
A       2           3
Quello che sto tentando di fare è aggiungere un campo alla query che mi
conti i record all'interno del raggruppamento cliente (DSCOCP).
Cliente = A                => RigheCodice = 4 



E' proprio questo che non capisco, la query esegue l'aggregazione di CDCOOO
raggruppata per DSCOCP quindi rende NrCommesse=4 pari al numero di righe
conteggiate.
Cliente NrCodice    NrCommesse
------- ----------- -----------
A       2           4
per ottenere il risultato da te postato si deve eseguire un Count Distinct
anche su CDCOOO quindi la query diventa ...
SELECT C1.DSCOCP AS Cliente, Count(C1.DSCOCP) AS NrRighe, C3.NrCodice,
C4.NrCommesse
FROM (INDEX_SelezioneDati AS C1 INNER JOIN (Select Count(Cx.CDAROO) AS
NrCodice, Cx.DSCOCP
                  From (Select Distinct DSCOCP, CDAROO FROM
                        INDEX_SelezioneDati) Cx
                 GROUP BY Cx.DSCOCP) AS C3 ON C1.DSCOCP = C3.DSCOCP) INNER
JOIN (Select Count(Cy.CDCOOO) AS NrCommesse, Cy.DSCOCP
                  From (Select Distinct DSCOCP, CDCOOO FROM
                        INDEX_SelezioneDati) Cy
                 GROUP BY Cy.DSCOCP) AS C4 ON C1.DSCOCP = C4.DSCOCP
GROUP BY C1.DSCOCP, C3.NrCodice, C4.NrCommesse;
e il risultato è
Cliente NrRighe NrCodice NrCommesse
------- -------- ---------- --------------
    A            4           2               3
Che è l'equivalente della seguente query In Sql server 2000
SELECT DSCOCP as Cliente , Count(DSCOCP) AS NrClienti,
               COUNT(DISTINCT CDAROO) AS NrCodice,
               COUNT(DISTINCT CDCOOO) AS NrCommesse
FROM INDEX_SelezioneDati
GROUP BY DSCOCP
Ciao Giorgio.