MS ACCESS: Comment puis-je compter une valeur distincte à l'aide d'une requête d'accès?

StackOverflow https://stackoverflow.com/questions/1412442

  •  06-07-2019
  •  | 
  •  

Question

voici la requête complexe en cours donnée ci-dessous.

SELECT DISTINCT Evaluation.ETCode, Training.TTitle, Training.Tcomponent, Training.TImpliment_Partner, Training.TVenue, Training.TStartDate, Training.TEndDate, Evaluation.EDate, Answer.QCode, Answer.Answer, Count(Answer.Answer) AS [Count], Questions.SL, Questions.Question
FROM ((Evaluation INNER JOIN Training ON Evaluation.ETCode=Training.TCode) INNER JOIN Answer ON Evaluation.ECode=Answer.ECode) INNER JOIN Questions ON Answer.QCode=Questions.QCode
GROUP BY Evaluation.ETCode, Answer.QCode, Training.TTitle, Training.Tcomponent, Training.TImpliment_Partner, Training.Tvenue, Answer.Answer, Questions.Question, Training.TStartDate, Training.TEndDate, Evaluation.EDate, Questions.SL
ORDER BY Answer.QCode, Answer.Answer;

Il existe une autre colonne Training.TCode. J'ai besoin de compter Training.TCode distinct, quelqu'un peut-il m'aider? Si vous avez besoin de plus d'informations, faites-le moi savoir

Était-ce utile?

La solution

essayer

select ..., count(distinct Training.Tcode) as ..., ...

EDIT - regardez maintenant ceci ...

Prenez le code SQL suivant. La première sélection concerne la manière dont le serveur SQL procéderait et la deuxième requête doit être conforme aux règles d'accès ...

declare @t table (eCode int, tcode int)
insert into @t values(1,1)
insert into @t values(1,1)
insert into @t values(1,2)
insert into @t values(1,3)
insert into @t values(2,2)
insert into @t values(2,3)
insert into @t values(3,1)    

select 
    ecode, count(distinct tCode) countof
from
    @t
group by
    ecode

select ecode, count(*)
from
    (select distinct tcode, ecode
    from  @t group by tcode, ecode) t
group by ecode

Il retourne ce qui suit:

ecode tcode
1       3 (there are 3 distinct tcode for ecode of 1)
2       2 (there are 2 distinct tcode for ecode of 2)
3       1 (there is 1 distinct tcode for ecode of 3)

Autres conseils

J'ai posté une question similaire il y a un an dans les groupes Google. J'ai reçu une excellente réponse:

Un tableau croisé peut faire (à partir d'une proposition originale de Steve Dassin) aussi longtemps que vous comptez soit le fonds, soit le compartiment:

  TRANSFORM COUNT(*) AS theCell
  SELECT ValDate,
      COUNT(*) AS StandardCount,
      COUNT(theCell) AS DistinctCount
  FROM tableName
  GROUP BY ValDate
  PIVOT fund IN(Null)

qui, pour chaque jour (groupe), renverra le nombre d'enregistrements et le nombre de fonds différents (distincts).

Changer

PIVOT fund IN(Null)

à

PIVOT subfund IN(Null)

pour obtenir le même, pour les sous-fonds.

En espérant que cela puisse aider, Vanderghast, Access MVP

Je ne sais pas si cela fonctionnera, mais voici un lien vers cette publication .

Sadat, utilisez une sous-requête comme celle-ci:

SELECT DISTINCT Evaluation.ETCode, Training.TTitle, Training.Tcomponent, Training.TImpliment_Partner, Training.TVenue, Training.TStartDate, Training.TEndDate, Evaluation.EDate, Answer.QCode, Answer.Answer, Count(Answer.Answer) AS [Count], Questions.SL, Questions.Question,
(SELECT COUNT(*) FROM Training t2 WHERE t2.TCode = Evalution.ETCode) as TCodeCount
FROM ((Evaluation INNER JOIN Training ON Evaluation.ETCode=Training.TCode) INNER JOIN Answer ON Evaluation.ECode=Answer.ECode) INNER JOIN Questions ON Answer.QCode=Questions.QCode
GROUP BY Evaluation.ETCode, Answer.QCode, Training.TTitle, Training.Tcomponent, Training.TImpliment_Partner, Training.Tvenue, Answer.Answer, Questions.Question, Training.TStartDate, Training.TEndDate, Evaluation.EDate, Questions.SL
ORDER BY Answer.QCode, Answer.Answer;

J'ai réussi à définir un nombre distinct dans Access, en procédant comme suit:

select Job,sum(pp) as number_distinct_fruits

from

(select Job, Fruit, 1 as pp

from Jobtable group by Job, Fruit) t

group by Job

Vous devez faire attention, car s'il y a un champ vide / nul (dans mon champ de fruit de code), le groupe de le comptera comme un enregistrement. Une clause Where dans la sélection interne ignorera ceux cependant. Je l'ai mis sur mon blog, mais je suis inquiet d'avoir découvert la réponse trop facilement. D'autres personnes ici semblent penser qu'il faut deux sous-requêtes pour que cela fonctionne. Ma solution est-elle viable? Regroupements distincts dans Access

Jetez un coup d'œil à cette entrée de blog: il apparaît que vous pouvez le faire avec des sous-requêtes ....

http://blogs.msdn.com/access/archive/2007/09/19/writing-a-count-distinct-query-in-access.aspx

Je proposerais

select R_rep,sum(pp) as number_distinct_Billnos from (select R_rep, Billno, 1 as pp from `Vat_Sales` group by R_rep, Billno) t group by R_rep

essayez ceci:

SELECT DISTINCT e.ETCode, t.TTitle, t.Tcomponent, 
      t.TImpliment_Partner, t.TVenue, t.TStartDate, 
      t.TEndDate, e.EDate, a.QCode, a.Answer, 
      q.SL, q.Question,
      Count(a.Answer) AnswerCount,
      Min(Select Count(*) 
       From (Select Distinct TCode From Training) As Z ) TCodeCount    
FROM Evaluation As e 
   JOIN Training AS t ON e.ETCode=t.TCode
   JOIN Answer AS a ON e.ECode=a.ECode
   JOIN Questions AS q ON a.QCode=q.QCode
GROUP BY e.ETCode, a.QCode, t.TTitle, t.Tcomponent, 
     t.TImpliment_Partner, t.Tvenue, a.Answer, q.Question, 
     t.TStartDate, t.TEndDate, Evaluation.EDate, q.SL
ORDER BY a.QCode, a.Answer;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top