2012-12-13 13 views
8

Mam tabeli w MS Access 2003, który wygląda tak:zapytanie, aby policzyć liczbę różnych wartości?

 

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

Dla każdego adresu URL Chcę wiedzieć ile unikatowy identyfikator istnieją. więc w tym przypadku wynik powinien być:

 

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

ta jest bardzo podobna do SQL query to count number of different values wyjątkiem rozwiązania w tym przypadku nie działa, ponieważ opiera się ona na COUNT DISTINCT, ale to nie jest obsługiwany w programie Access. Próbowałem szukać alternatywnych sposobów liczenia różnych w programie Access, ale obawiam się, że nie rozumiem odpowiedzi.

Zgaduję więc, że ten problem można podsumować jako "jak symulować count odrębny w msaccess".

Byłbym bardzo wdzięczny, gdyby ktoś mógł dać mi wskazówkę.

+1

+1 Za dobrze sformułowane pytanie (i przeszukiwanie archiwów po pierwsze odpowiedzi! :). – Leigh

+0

Dobre pytanie, zmagałem się z tym problemem. –

Odpowiedz

5

To powinno działać w MS Access 2003 (Właśnie testowałem go):

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

W tym uzyskać odrębny identyfikator i adres URL w podkwerendzie a następnie policzyć tego rezultatu.

+0

Dziękuję bardzo, to działa. Usunąłem "x", który moim zdaniem jest literówką (?) I świetnie się nadaje. Doceniam twoją pomoc. – Raymond

+1

Symbol x był aliasem dla podzapytania. Jestem przyzwyczajony do serwera SQL, który go wymaga, ale działał w dostępie z aliasem – Taryn

1

Oto inny sposób robienia tego bez użycia odrębnego słowa kluczowego. (Chociaż wygląda na to, że będą go wspierać późniejsze wersje dostępu):

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

Dziękuję, spróbuję, jeśli będę miał problemy z poprzednim rozwiązaniem. – Raymond

Powiązane problemy