MS ACCESS: Comment puis-je compter une valeur distincte à l'aide d'une requête d'accès?
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
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;