2012-12-13 13 views
8

Ho una tabella in MS Access 2003 che assomiglia a questo:query per contare il numero di valori diversi?

 

    *url   id* 
    example.com red 
    example.com blue 
    example.com blue 
    other.com  red 
    other.com  orange 
    more.com  blue 

Per ogni URL che voglio sapere quanti ID univoco ci sono. quindi in questo caso il risultato dovrebbe essere:

 

    *url    count of distinct id* 
    example.com   2   (because red and blue are the only values) 
    other.com   2 
    more.com    1 

Questo è molto simile al SQL query to count number of different values tranne la soluzione in questo caso non funziona perché si basa su COUNT DISTINCT, ma che non è supportato in Access. Ho provato a cercare modi alternativi di fare il conteggio distinti in Access, ma temo di non capire le risposte.

Quindi immagino che questo problema possa essere riassunto come "come simulare il conteggio distinto in msaccess".

Lo apprezzerei molto se qualcuno potesse darmi un suggerimento.

+1

+1 Per una domanda ben formulata (e la ricerca negli archivi per le risposte prima :)!. – Leigh

+0

Buona domanda, ero alle prese con questo problema esatto. –

risposta

5

Questo dovrebbe funzionare in MS Access 2003 (ho appena provato):

SELECT url, count(id) as CountOfId 
FROM 
(
    SELECT distinct id, url 
    FROM yourtable 
) x 
GROUP BY url 

In questo si ottiene l'id distinto e URL in una sottoquery e poi si conta che risultato.

+0

Grazie mille, questo funziona. Ho rimosso la "x" che credo sia un errore di battitura (?) E fa il lavoro alla grande. Apprezzo il vostro aiuto. – Raymond

+1

La x era un alias per la sottoquery. Sono abituato al server SQL che lo richiede, ma ha funzionato in accesso con l'alias – Taryn

1

Ecco un altro modo per farlo senza utilizzare la parola chiave distinta. (Anche se sembra versioni successive di accesso sarebbe sostenerlo):

SELECT t.url, Count(*) AS distinct_id_count 
FROM 
(
    SELECT url 
    FROM *source_table_name_here* 
    GROUP BY url, id 
) AS t 
GROUP BY t.url 
ORDER BY COUNT(*) DESC, t.url; 
+0

Grazie, proverò questo se ho qualche problema con la soluzione precedente. – Raymond

Problemi correlati