sql - registro - dcount()
MS ACCESS: ¿Cómo puedo contar un valor distinto usando la consulta de acceso? (7)
Echa un vistazo a esta entrada de blog, parece que puedes hacer esto con subconsultas ...
http://blogs.msdn.com/access/archive/2007/09/19/writing-a-count-distinct-query-in-access.aspx
aquí está la consulta compleja actual dada a continuación.
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;
Hay otra columna Training.TCode. Necesito contar Training.TCode distinto, ¿alguien puede ayudarme? Si necesita más información, por favor hágamelo saber
Logré hacer un valor de recuento distinto en Access haciendo lo siguiente:
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
Tienes que tener cuidado ya que si hay un campo en blanco / nulo (en mi campo de fruta de código) el grupo lo contará como un registro. Una cláusula WHERE en la selección interna ignorará aquellos. He puesto esto en mi blog, pero estoy preocupado de haber descubierto la respuesta con demasiada facilidad; otros aquí parecen pensar que necesitas dos subconsultas para que esto funcione. ¿Mi solución es viable? Distintas agrupaciones en Access
Publiqué una pregunta similar hace un año en grupos de Google. Recibí una excelente respuesta:
Una tabla cruzada puede hacer (a partir de una propuesta original de Steve Dassin) siempre que cuente el fondo, ya sea el subfondo:
TRANSFORM COUNT(*) AS theCell
SELECT ValDate,
COUNT(*) AS StandardCount,
COUNT(theCell) AS DistinctCount
FROM tableName
GROUP BY ValDate
PIVOT fund IN(Null)
que, por cada día (grupo), devolverá el número de registros y el número de fondos diferentes (distintos).
Cambio
PIVOT fund IN(Null)
a
PIVOT subfund IN(Null)
para obtener lo mismo, para los subfondos.
Esperando que pueda ayudar, Vanderghast, Access MVP
No sé si funcionará, pero aquí hay un enlace a esa publicación .
Sadat, usa una subconsulta como esta:
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;
Yo propondría
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
prueba esto:
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;
tratar
select ..., count(distinct Training.Tcode) as ..., ...
EDITAR - por favor ahora mira esto ...
Tome el siguiente código SQL. La primera selección es cómo SQL Server haría esto y la segunda consulta debería ser compatible con el acceso ...
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
Devuelve lo siguiente:
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)