Stai facendo un guazzabuglio nell'impiego del conteggio, che è legato ai dati su cui effettui il raggruppamento e/o l'impiego del predicato DISTINCT in base ai campi selezionati.
Cerco di fornirti degli esempi a partire dai dati da te postati.
Tabella originaria
ID dal al tipo di trattamento
7 23/11/2017 24/01/2018 Metadone
7 14/11/2017 25/12/2018 Farmacologico
8 02/10/2018 02/10/2018 Farmacologico
8 01/11/2018 11/11/2018 Farmacologico
9 02/10/2018 11/11/2018 Metadone
11 10/10/2018 10/12/2018 Metadone
ove dei sei record se ne selezionano quattro (appartenenti all'intervallo del 2018):
ID dal al tipo di trattamento
8 02/10/2018 02/10/2018 Farmacologico
8 01/11/2018 11/11/2018 Farmacologico
9 02/10/2018 11/11/2018 Metadone
11 10/10/2018 10/12/2018 Metadone
ciò è possibile, ad esempio, impiegando una semplice query il cui codice SQL è il seguente:
SELECT date_trattamenti.ID, date_trattamenti.dal, date_trattamenti.al, date_trattamenti.[tipo di trattamento]
FROM date_trattamenti
WHERE (((date_trattamenti.dal) Between #1/30/2018# And #12/30/2018#));
oppure questo con costrutto più complesso (avendo GROUP BY ... HAVING ... ORDER BY ...) ma di medesimo risultato:
SELECT date_trattamenti.ID, date_trattamenti.dal, date_trattamenti.al, date_trattamenti.[tipo di trattamento]
FROM date_trattamenti
GROUP BY date_trattamenti.ID, date_trattamenti.dal, date_trattamenti.al, date_trattamenti.[tipo di trattamento]
HAVING (((date_trattamenti.dal) Between #1/30/2018# And #12/30/2018#))
ORDER BY date_trattamenti.ID;
Ora agendo con lo stesso criterio del periodo in esame ((date_trattamenti.dal) Between #1/30/2018# And #12/30/2018#) se si volesse un conteggio dei record presenti (per ciascun ID); un esempio è il seguente:
SELECT date_trattamenti.ID, Count(date_trattamenti.ID) AS ConteggioDiID
FROM date_trattamenti
WHERE (((date_trattamenti.dal) Between #1/30/2018# And #12/30/2018#))
GROUP BY date_trattamenti.ID;
ID ConteggioDiID
8 2
9 1
11 1
Lo stesso risultato si ottiene inserendo il predicato DISTINCT:
SELECT DISTINCT date_trattamenti.ID, Count(date_trattamenti.ID) AS ConteggioDiID
FROM date_trattamenti
WHERE (((date_trattamenti.dal) Between #1/30/2018# And #12/30/2018#))
GROUP BY date_trattamenti.ID;
ID ConteggioDiID
8 2
9 1
11 1
Qualora il predicato DISTINCT sia basato su un solo campo calcolato e non vi siano raggruppamenti avremo un conteggio totale dei record in esame:
SELECT DISTINCT Count(date_trattamenti.ID) AS ConteggioDiID
FROM date_trattamenti
WHERE (((date_trattamenti.dal) Between #1/30/2018# And #12/30/2018#));
ConteggioDiID
4
Mentre se prendiamo l'esempio da te postato, potrei notare che effettui un raggruppamento (non necessario) ed ottieni i due valori:
SELECT DISTINCT Count(date_trattamenti.ID) AS ConteggioDiID
FROM date_trattamenti
GROUP BY date_trattamenti.dal
HAVING (((date_trattamenti.dal) Between #1/30/2018# And #12/30/2018#));
ConteggioDiID
1
2
Tieni presente che come riportato nella guida per il predicato DISTINCT
Per essere inclusi nei risultati della query, i valori per ogni campo elencato nell'istruzione SELECT devono essere univoci.
https://support.office.com/it-it/article/predicati-all-distinct-distinctrow-top-24f2a47d-a803-4c7c-8e81-756fe298ce57
mentre la tua SELECT DISTINCT è basata su un solo campo calcolato di conteggio (e quindi ha poco senso);
inoltre, dopo il raggruppamento (tramite "GROUP BY") impiegare la clausola "HAVING"
https://support.office.com/it-it/article/clausola-having-64c52dba-5cda-45c5-98b5-bd155a89f02f
qualora questo (date_trattamenti.dal) non sia necessario, poteva essere risolto con una semplice "espressione" senza la necessità della clausola "HAVING", come in alcuni degli esempi sopra riportati.
In ogni caso ti consiglio di approfondire lo studio e riflettere sui dati che devi ottenere, magari poi procedere (non a tentativi) a valutare i campi (calcolati o meno) che devono confluire nella query risultante.
PS quando alleghi del codice, come previsto dalle norme del forum devi racchiuderlo fra tag-code.