Contagem/agrupamento de registos na pesquisa de acesso

Encontrei um problema ao tentar agrupar registos numa consulta.
O que eu preciso é - depois de selecionar período de dados de um comboBox - em uma sub-forma subjacente para ter uma contagem de registros para cada empregado dentro do período de data selecionada.

Introdução

Nota: para simplificar, usei apenas dois campos.

o formulário principal tem o TabControl. Cada página tem uma sub-forma (Fonte: query). Cada registro de uma consulta tem data (V_LOCATION_VISIT_DATE) e empregado (V_WORKER) fields. Cada V_WORKER tem centenas de entradas (ligação à Oracle db).

num formulário tenho um prazo de validade (exemplo: "16.05.2018-15.06.2018").
Depois de selecionar um valor de um cboDatePeriod, um código compara o período de dados com datas em uma consulta e filtra-o.

([8]) uma consulta tem ligação interna para os empregados QRY, uma vez que eu quero contar registros para empregados específicos.

exemplo de entradas em uma tabela de Dados:

|V_WORKER       | V_LOCATION_VISIT_DATE  
| David Sylvian | 08.01.2018 14:38:21  
| David Sylvian | 08.01.2018 15:31:48  
| David Sylvian | 08.01.2018 16:22:07  
| Brian Eno     | 08.01.2018 17:33:07  
| Brian Eno     | 09.01.2018 16:18:50   
| Brian Eno     | 09.01.2018 17:09:21 

Código Sem data :

SELECT qryDATA.V_WORKER,Count(qryDATA.V_WORKER) AS CountOfV_WORKER
FROM qryEmployeesCZS DATA ON qryEmployeesCZS.FullName = qryDATA.V_WORKER
GROUP BY qryDATA.V_WORKER
HAVING (((qryDATA.V_WORKER)<>""));
Exemplo do resultado da Pesquisa:

|V_WORKER       | CountOfV_WORKER              
| David Sylvian |  821   
| Brian Eno     |  92      

é como deve ser, Depois de aplicar o filtro do período de dados. Vamos continuar.

Código com data incluída:
Com a data incluída na função int para remover o selo de tempo) em vez de ter um único registro para cada empregado eu tenho muitos registros para cada empregado, onde cada registro é uma contagem de registros por um único dia (agrupado por V_WORKER e DAY).

SELECT qryDATA.V_WORKER, Int([qryDATA].[V_LOCATION_VISIT_DATE]) AS V_LOCATION_VISIT_DATE, 
Count(qryDATA.V_WORKER) AS CountOfV_WORKER
FROM DATA 
INNER JOIN qryEmployeesCZS ON qryDATA.V_WORKER = qryEmployeesCZS.[FullName]
GROUP BY qryDATA.V_WORKER,Int([DATA].[V_LOCATION_VISIT_DATE])
HAVING (((qryDATA.V_WORKER)<>""));

exemplo do resultado da pesquisa (eu usei int função para remover a data-limite):

|    V_WORKER    | V_LOCATION_VISIT_DATE | CountOfV_WORKER   
| David Sylvian  |      08.01.2018       |        4   
| David Sylvian  |      09.01.2018       |        6   
| David Sylvian  |      10.01.2018       |        2   
| Brian Eno      |      11.01.2018       |        4   
| Brian Eno      |      12.01.2018       |        2   
| Brian Eno      |      15.01.2018       |        5   
| Brian Eno      |      16.01.2018       |        3   

O Que Eu quero:
Depois de seleccionar o período de data de um comboBox, quero contar um registo agrupado por V_ worker - deverá ficar assim:

|    V_WORKER-  | CountOfV_WORKER   
| David Sylvian |     26    
| Brian Eno     |     17
Tentei com uma caixa de texto numa sub-forma que conta os registos, mas claro que conta todos os registos, Não agrupados por empregado.

O que estou a pensar (num momento de desespero) é ter duas perguntas numa sub-reforma: queryOne terá todos os registos com datas e sem agrupamento, e um segundo (fonte: queryOne) com o campo de data removido e agrupamento incluído.

Alguma ideia?

Author: Vedran, 2018-06-13

1 answers

É assim que agregação e agrupar por trabalho.

Se agrupar por data, receberá a contagem por data.
Se você quer apenas agrupar por empregado para obter a contagem completa, então faça isso. Remover V_LOCATION_VISIT_DATE do grupo por cláusula.

Que data você gostaria de ter com a contagem completa? O primeiro? O último? Em seguida, use MIN() ou MAX() funções agregadas para a data.


Editar do comentário:

Então a data vai para a cláusula onde, como isto:

SELECT qryEmployees.EmployeeName, Count(*) AS EmpCount
FROM (Data_Servisi INNER JOIN qryEmployees ON Data_Servisi.WORKER = qryEmployees.EmployeeName) INNER JOIN City ON qryEmployees.CityID = City.CityID
WHERE Data_Servisi.V_LOCATION_VISIT_DATE BETWEEN Forms!myForm!DateStart AND Forms!myForm!DateEnd
GROUP BY qryEmployees.EmployeeName
 0
Author: Andre, 2018-06-14 09:13:54