MS ACCESS: Как я могу посчитать отличное значение, используя запрос доступа? - PullRequest
6 голосов
/ 11 сентября 2009

здесь текущий сложный запрос, приведенный ниже.

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;

Есть еще один столбец Training.TCode. Мне нужно посчитать отдельный Training.TCode, кто-нибудь может мне помочь? Если вам нужна дополнительная информация, пожалуйста, дайте мне знать

Ответы [ 7 ]

4 голосов
/ 11 сентября 2009

1001 * попробовать *

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

РЕДАКТИРОВАТЬ - пожалуйста, посмотрите на это ...

Возьмите следующий код SQL. Первый выбор - это то, как SQL-сервер будет это делать, а второй запрос должен быть совместимым с доступом ...

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

Возвращает следующее:

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)
2 голосов
/ 17 апреля 2010

Мне удалось сделать различное значение в Access, выполнив следующее:

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

Вы должны быть осторожны, как будто есть пустое / пустое поле (в поле кода моего кода), которое группа будет считать, что это запись. Предложение Where во внутреннем выборе будет игнорировать их. Я разместил это в своем блоге, но обеспокоен тем, что нашел ответ слишком легко - другие здесь, кажется, думают, что вам нужно два подзапроса, чтобы сделать эту работу. Является ли мое решение жизнеспособным? Отдельные группировки в Access

2 голосов
/ 18 сентября 2009

Садат, используйте такой подзапрос, как этот:

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;
2 голосов
/ 14 сентября 2009

Я опубликовал аналогичный вопрос около года назад в группах Google. Я получил отличный ответ:


Кросс-таблица может сделать (из оригинального предложения от Стива Дассена) так долго при подсчете либо фонда, либо подфонда:

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

, который для каждого дня (группы) возвращает количество записей и количество разных (разных) фондов.

Изменение

PIVOT fund IN(Null)

до

PIVOT subfund IN(Null)

чтобы получить то же самое, для субфондов.

Надеясь, что это может помочь, Vanderghast, Access MVP


Не знаю, сработает ли это, но вот ссылка на этот пост .

0 голосов
/ 01 июля 2013

Я бы предложил

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
0 голосов
/ 13 сентября 2009

Посмотрите на эту запись в блоге, кажется, вы можете сделать это с помощью подзапросов ....

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

0 голосов
/ 11 сентября 2009

попробуйте это:

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;
...